• Publicidad

Convertir archivos de texto en hash

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Convertir archivos de texto en hash

Notapor ana gonzález ledesma » 2006-11-02 10:42 @487

Hola, estoy intentando hacer un programa muy sencillo que me pregunte vocabulario en inglés, y lo he concebido, como era de esperar, como un hash, donde las claves son las palabras en español y los valores las palabras en inglés. Este que presento a continuación es el programa chorra que he hecho con un hash dentro del mismo programa.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
%hash = (hola, hello, naranja, orange, tu, you, manzana, apple, cosa, thing); #creación del hash

foreach $key (keys(%hash)) {
        print "$key\n";          
        $input = <STDIN>;        
        chomp($input);            
        $valor=$hash{$key};                    
              if ($input eq $valor) {print "yes\n";}    
             else {print "nooo\n";}
       
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y así, funciona. El problema es cuando tengo que meter en el hash un archivo de texto que tiene esta disposición:
Código: Seleccionar todo
manzana
apple
naranja
orange

donde cada elemento del hash es una línea.
Nada de lo que he intentado hasta ahora me ha salido. ¿Alguna idea?
ana gonzález ledesma
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-11-02 10:25 @475

Publicidad

Notapor kidd » 2006-11-02 11:33 @523

Hola:


Dígamos que tienes un archivo de la siguiente manera:

Código: Seleccionar todo
manzana
apple
naranja
orange


Entonces para leer el archivo y meter la información en tu hash, puedes hacer algo así:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open my $FILE, '<', "palabras.txt" or die("Unable to open file: $!");
my %hash = map { chomp; $_ } <$FILE>;
close $FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Y al final tendrás tu %hash de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
%hash = {
          'naranja' => 'orange',
          'manzana' => 'apple'
        };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Releí tu mensaje y vi que lo que necesitabas era escribir el hash a un archivo en la manera que quieres. Eso es sumamente sencillo y lo puedes hacer de la siguiente manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open my $OUT, '>', "palabras_hash.txt" or die("Unable to open file: $!");
print {$OUT} join "\n", %hash;
close $OUT;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos
Última edición por kidd el 2006-11-02 11:38 @526, editado 1 vez en total
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

Notapor Perl user » 2006-11-02 11:37 @526

Que tal,

Tienes varias soluciones, hay 2 que me vienen ahorita a la cabeza que no creo que te cuesten mucho trabajo:

La primera es almacenar tu archivo en un array ( si tu archivo no es muy grande ), hacerle un chomp ( a manera de lista ) y al final asignarle dicho array al hash.

La segunda forma sería iterar sobre tu archivo, por cada 2 valores que leas ingresarlos al hash ( ya que corresponde al conjunto llave-valor ), es decir, almacenarás la primera iteración, y a la segunda, el valor almacenado lo metes como llave y el actual como su valor.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor ana gonzález ledesma » 2006-11-02 13:42 @612

Muchas gracias por todo, sobre todo porque entiendo que las cuestiones más básicas a veces motivan menos a la hora de contestar, pero a mí me han servido mucho todas las propuestas para seguir avanzando
ana gonzález ledesma
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-11-02 10:25 @475

Notapor Perl user » 2006-11-02 13:44 @614

ana gonzález ledesma escribiste:Muchas gracias por todo, sobre todo porque entiendo que las cuestiones más básicas a veces motivan menos a la hora de contestar, pero a mí me han servido mucho todas las propuestas para seguir avanzando


A nadie desmotivan, al contrario, te exhorto a que te sigas preparando y te apegues mucho más a la lectura y las dudas obtenidas las hagas en el foro.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron