Sin embargo, tras crear el hash en el while y hacer la consulta con el STDIN, no hay resultado alguno, ya que solo guarda la última línea del txt.
Necesitamos ayuda urgente, ya que es para un trabajo de una asignatura del grado. ¡¡¡Un saludo!!!
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use warnings;
- use strict;
- my $archivo = $ARGV[0];
- my @campos;
- my @identificadores;
- my %datos;
- my @array;
- my @array2;
- # Hemos declarado las variables y diccionarios fuera del bucle
- open( IN, $archivo ) or die "No se pudo leer $archivo, programa erróneo.";
- while (<IN>) {
- # eliminar el salto de línea
- chomp $_;
- # cortar los elementos separados por un tabulador y añadirlo cada uno como elemento de un array
- @campos = split( '\t', $_ );
- @identificadores = split( ',', $campos[4] );
- # creamos un hash con valores separados por espacios del array @campos
- #%datos = ("$campos[2]" => "$campos[0] $campos[4]");
- push( @array, "$campos[2]" );
- push( @array2, "$campos[0] $campos[4]" );
- #print ($datos {"$campos[2]"}. "\n");
- }
- # Como sólo nos estaba almacenando en el diccionario el último valor, hemos creado unos arrays para almacenar los datos
- for ( my $c = 0; $c <= 2306; $c++ ) {
- %datos = ( "$array[$c]" => "$array2[$c]" );
- #print ($datos {"$array[$c]"}. "\n");
- }
- # Introducimos una especie en la terminal
- print( "Introduzca especie" . "\n" );
- my $in = (<STDIN>);
- chomp($in);
- #Si la especie no coincide con el formato del nombre científico, que retorne un error
- #if ($in !~ m/[a-z] [a-z]/) {
- #print("Error. Esto no es una especie\n");
- #}
- # Búsqueda en el hash de nuestra especie con un bucle foreach y que te devuelva
- #los campos Identificador y Bases de datos correspondientes a la especie
- # Aquí es dónde tenemos el problema: Al ejecutar el script en la terminal, nos permite introducir
- # la especie con el STDIN, pero no nos da ningún dato en la terminal.
- foreach my $busqueda ( keys %datos ) {
- if ( $busqueda =~ m/$in/i ) {
- print( $datos {"$in"} . "\n" );
- }
- }
- close IN;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4