• Publicidad

Buscar en archivo e imprimir cadena de caracteres

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

Buscar en archivo e imprimir cadena de caracteres

Notapor tuxiano » 2012-06-22 19:57 @873

Muy buenas, gente. Soy un aficionado a bash y hace poco empecé con Perl. Hoy mismo estuve haciendo algo en el trabajo.

Lo que tengo es lo siguiente: Un archivo de texto XML, y una cadena de caracteres aleatoria por la cual buscar.

He probado de varias maneras y no logré que Perl me imprima la cadena aun así yo sabiendo que la misma existe en el archivo.

El script que tengo es algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ##!/usr/bin/perl
  2.  
  3. print "Ingrese archivo a parsear:";
  4. $file = <STDIN>;
  5. print "Ingrese argumento de busqueda:";
  6.  
  7. $argumento=<STDIN>;
  8. #$file = $ARGV[0];
  9. #die "\n[x] Ingrese Argumento\n\nUSO: $0 file.txt\n\n" if(!$ARGV[0]); ## si falt                                                                                       a el primer argumento termina el prog y describe el uso
  10. #
  11. # ## esto es un comentario xD
  12. # ## este es otro comentario , tengo sueñP
  13. #print "$file";
  14. open( FILE, "<$file" ) || die "[x] No se puede abrir archivo\n";
  15. $l = 0;
  16. while ( $line = <FILE> ) {             ## recorre el archivo y lo apunta a $line
  17.     $l++;                              ## contador :P
  18.     if ( $line == $argumento )
  19.     {                                  ## regexp toma las lineas en las que encuentre :                                                                                          # :S
  20.  
  21.         #print "$argumento";
  22.         #print "$line";
  23.         push( @almacen, $line );       ## almacena en el array @almacena if esta el match
  24.         print "linea: $l \t->\t ";
  25.         print "$line";
  26.  
  27.         #if($line =~ m/(.*):(.*)/g){  ## captura los datos que estan entre ":" .
  28.         #print "\t\t\t dato1-> $1\n";
  29.         #print "\t\t\t dato2-> $2\n\n";
  30.         #}
  31.     }
  32. }
  33.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El problema está en la comparación en el "if". Si yo, en esta línea, pongo algo constante, del tipo
=~ /cadena/;, Perl logra la comparación de manera más que exitosa, pero no así, cuando intento asignar la cadena a buscar a una variable y que la misma sea la comparada.

Espero ser claro. Muchas gracias de antemano.
Última edición por tuxiano el 2012-06-22 22:37 @984, editado 3 veces en total
tuxiano
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-06-22 19:42 @863

Publicidad

Re: Buscar en archivo e imprimir cadena de caracteres

Notapor explorer » 2012-06-22 22:28 @978

Bienvenido a los foros de Perl en Español, tuxiano.

En Perl, hay que usar los operadores de comparación adecuados a cada situación.

El operador '==' es el de igualdad numérica.

Necesitarás usar el operador 'eq', que es el igualdad alfanumérica.

Ahora bien, no estamos buscando una igualdad (salvo que en algún momento queramos buscar una línea entera), sino saber si en una parte de la $linea leída está la cadena que buscamos. En esos casos usamos las expresiones regulares, con el operador =~.

Tu programa sería así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "Ingrese el archivo a parsear:";
  4. $file      = <STDIN>;
  5. chomp $file;                           # quitamos carácter de fin de línea
  6. print "Ingrese argumento de búsqueda:";
  7. $argumento = <STDIN>;
  8. chomp $argumento;
  9.  
  10. open( FILE, "<$file" ) or die "[x] No se puede abrir archivo $file: $!\n";
  11.  
  12. $l = 0;
  13. while ( $line = <FILE> ) {             # recorre el archivo y lo apunta a $line
  14.     $l++;                              # contador :P
  15.  
  16.     if ( $line =~ /$argumento/ ) {     # regexp toma las líneas en las que encuentre $argumento
  17.  
  18.         push @almacen, $line;          # almacena en el array @almacen
  19.  
  20.         print "linea: $l \t->\t $line";
  21.     }
  22. }
  23.  
  24. close FILE;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar en archivo e imprimir cadena de caracteres

Notapor tuxiano » 2012-06-22 22:35 @983

Wow, usted sí que sabe, ¡¡¡¡¡GRACIAS!!!!!
tuxiano
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-06-22 19:42 @863


Volver a Básico

¿Quién está conectado?

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