• Publicidad

Cómo leer líneas de archivos

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

Cómo leer líneas de archivos

Notapor ricky_jr » 2009-08-15 12:35 @565

A ver, ya estoy algo desesperado. No sé qué tanto estoy haciendo mal, así que mi pregunta es cómo leo el archivo recibido. Coloco este código y, por favor, díganme qué hacer.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 die "no hay que leer?\n" unless $ARGV[0];
      while(<>) {
        $_=(/\d+\s+|t+\w+/);#necesito la linea completa ni siquiera voy a usar el split
   print"$_ \n"; #se supone que me dijieron que esta $_  es mi linea pero aparece todo en blanco
   }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

¿Qué pasa aquí? ¿Esto está mal o qué? Otra opción era:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 die "no hay que leer?\n" unless $ARGV[0];
 
    while($linea=<>) {
         @linea;    # y se supone que aqui ya esta mi linea de texto y repito la quiero completa  desde donde puedo empezar a manipular mi linea. gracias
   }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-08-15 13:21 @598, editado 1 vez en total
Razón: Ortografía, bloques de código
ricky_jr
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2009-08-12 21:07 @921

Publicidad

Re: como leer lineas de archivos

Notapor Leo_Gutierrez » 2009-08-15 12:48 @575

No lees nada porque no has abierto el archivo a leer.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. die("No hay que leer?\n") unless $ARGV[0];
  5. open(FILE, "<$ARGV[0]") or die("El archivo no se pudo abrir para leer.\n");
  6. while(<FILE>)
  7. {
  8. print;
  9. # print $_;
  10. }
  11. close(FILE);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Leo_Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 91
Registrado: 2008-08-20 23:38 @026

Re: Cómo leer líneas de archivos

Notapor explorer » 2009-08-15 13:36 @608

Cometes varios errores:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$_=(/\d+\s+|t+\w+/);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Qué pretendías hacer aquí? No está claro. Lo que está claro es que Perl asigna el valor resultado de aplicar una expresión regular a $_. Y ese valor es booleano falso (por eso no ves nada en pantalla).

En el segundo código, no es lo mismo la variable escalar $linea que la OTRA variable arreglo @linea.

Para leer el fichero que le pasas por la línea de argumentos, te vale el ejemplo de RockoX, pero, de forma más abreviada, te vale con un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

die("No hay que leer?\n") unless $ARGV[0];

while (<>) {
    print;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Este código comprueba que el usuario le ha pasado un argumento. A continuación, Perl, (de forma automática) lo abre y lo va pasando línea a línea con la ayuda del operador '<>' a $_ (que no se ve en todo el programa). Por cada línea, ejecuta un print(), que al no decir nada, es lo mismo que decir print $_;, por lo que entonces sacará a pantalla la línea del fichero que leyó antes. El bucle termina al intentar más allá del final del fichero.

Un poco más claro:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

die "Uso: $0 <fichero a leer>\n" if ! $ARGV[0];
while (my $linea = <>) {
    print $linea;

    # aquí podemos jugar con la línea
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

(Recuerda los problemas que hay si pones más de un argumento).

Otra cosa es que quieras guardar todas las líneas del fichero, en una sola estructura de datos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

die "Uso: $0 <fichero a leer>\n" if ! $ARGV[0];

open FICHERO, "<$ARGV[0]" or die;
my @lineas = <FICHERO>;          # cada línea se guarda en un elemento del arreglo
close FICHERO;
Coloreado en 0.001 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


Volver a Básico

¿Quién está conectado?

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

cron