• Publicidad

Archivos

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Archivos

Notapor diego_el_38 » 2005-06-02 18:04 @795

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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Publicidad

Notapor monoswim » 2005-06-02 20:11 @882

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor diego_el_38 » 2005-06-02 20:34 @898

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]
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Notapor kidd » 2005-06-02 21:10 @924

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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados