Página 1 de 1

Archivos

NotaPublicado: 2005-06-02 18:04 @795
por diego_el_38
hola... tengo un archivo que lo abro para lectura y guardo su contenido en un hash de la siguiente forma:
open(FILE,"$archivo");
@sesion = <FILE>;
close(FILE);
foreach $sesion (@sesion){
chop $sesion;
($id, $horaout, $minutoout, $segundoout, $ip, $nombre) = split(/\:/,$sesion);
%HASH = (id=>$id, horaout=>$horaout, minutoout=>$minutoout, segundoout=>$segundoout, ip=>$ip, nombre=>$nombre);
}
lo q me ocurre es q en el hash nada mas me guarda el ultimo registro qque esta en el archivo y no todos los registros... alguien me puede ayudar ya q necesito q esten todos los registros disponibles...
desde ya muchas gracias
saludos
diego

NotaPublicado: 2005-06-02 20:11 @882
por monoswim
Probá colocando todos los balores sin =>, simplemente separados por ,

%HASH = ('id', $id,'horaout',$horaout,'minutoout',$minutoout, 'segundoout', $segundoout, 'ip',$ip,'nombre',$nombre);

Pero lo asigana automáticamente...

Saludos

NotaPublicado: 2005-06-02 20:34 @898
por diego_el_38
hola, primero gracias por responder... mira no cambia en nada, o sea me sigue quedando nada mas que el ultimo registro... lo q creo q ocurre es q al tener el mismo nombre sobrescribe todo... a lo q ahora me pregunto como hago para decir q aumente uno, se puede tener varios values q respondas a la misma key???... hay alguna solucion al respecto??
saludos
diego[/quote]

NotaPublicado: 2005-06-02 21:10 @924
por kidd
Hola:

Perl está haciendo exactamente lo que pides, por cada registro del archivo esta haciendo una variable %Hash, pero como la variable %Hash ya existe, entonces la reescribe. Más bien lo que podrías hacer es lo siguiente:

Código: Seleccionar todo
my %Registros;

open(FILE,"$archivo");

while(my $sesion = <FILE>){
    chomp($sesion);

    my ($id, $horaout, $minutoout, $segundoout, $ip, $nombre) = split(/\:/,$sesion);

    $Registros{$id}{horaout} = $horaout;
    $Registros{$id}{minutoout} = $minutoout;
    $Registros{$id}{segundoout} = $segundoout;
    $Registros{$id}{ip} = $ip;
    $Registros{$id}{nombre} = $nombre;
}

close(FILE);


for my $key(sort keys %Registros){
     print "Elemento $key\n";
     print "\$Registros{$key}{horaout} = " . $Registros{$key}{horaout} . "\n";
     print "\$Registros{$key}{minutoout} = " . $Registros{$key}{minutoout} . "\n";
     print "\$Registros{$key}{segundoout} = " . $Registros{$key}{segundoout} . "\n";
     print "\$Registros{$key}{ip} = " . $Registros{$key}{ip} . "\n";
     print "\$Registros{$key}{nombre} = " . $Registros{$key}{nombre} . "\n";
     print "-------------------------------\n\n";
}


Lo que hace es que por cada registro hace una nueva entrada al hash %Registros cuya llave va a ser el id del registro, y entonces creamos un valor por cada una.

También podrías crear lo mismo guardando un array por cada registro igual con la llave siendo el ID.


SALUDOS