• Publicidad

Recorrer fichero

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

Recorrer fichero

Notapor teco000 » 2008-07-28 17:57 @789

Saludos, con una molestia, tengo mi programa que recorre un fichero pero ahora necesito que no tome en cuenta la última línea. ¿Cómo lo puedo hacer?
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala

Publicidad

Notapor explorer » 2008-07-28 18:22 @806

Esta es una forma (no especialmente bonita).

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

open FICHERO, "<kk.txt";

my $linea;
my $linea_anterior;
while ( $linea = <FICHERO> ) {

    if ( $linea_anterior ) {
        # Procesa la línea anterior
        print "$linea_anterior\n";
    }

    $linea_anterior = $linea;
}

close FICHERO;
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

Notapor kidd » 2008-07-28 18:48 @825

Yo usaría la función eof() para verificar el final del archivo, y un last para salir del while.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;

open my $FILE, '<', 'kk.txt' or die $!;

while ( my $linea = <$FILE> ) {
    last if eof($FILE); #si es la última línea sale del while
    print $linea;
}

close $FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 explorer » 2008-07-28 19:02 @834

¡Ja! Se me olvidaba otra... el modo 'chupador'.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use File::Slurp;

my @lineas = read_file('kk.txt');

foreach my $i ( 0 .. $#lineas - 1 ) {
    print "$lineas[$i]\n";
}
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

Notapor teco000 » 2008-07-29 09:12 @425

Gracias, a ambos, me son de mucha ayuda
teco000
Perlero nuevo
Perlero nuevo
 
Mensajes: 67
Registrado: 2008-05-29 15:22 @682
Ubicación: Guatemala

Notapor Kiloko » 2008-08-07 10:50 @493

Suenan bien los ejemplos, pero ¿cómo sería al revés? ¿que solo se imprimiera la última línea, :?: sin usar slurp?
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2008-08-07 11:38 @526

Pues... fácil... vas leyendo el fichero, línea a línea. Cuando se llega al final del fichero, sale del bucle. En ese momento, el valor de la variable que iba almacenando las líneas leídas contendrá la última línea leída.
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

Notapor Kiloko » 2008-08-07 13:03 @586

mmm A ver, comprendo lo de línea a línea pero al final te imprime, el contenido neto.

Primero abro el archivo. Lo meto a un @database, para después hacer un foreach, pero no comprendo eso de al final, no puedo mandar un print fuera de las { }. Entonces, ¿cómo se obtendría la última lectura?

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

open FICHERO, "<t.txt" or die "No se pudo localizar el archivo... \n";
my @database = <FICHERO>;
close(FICHERO);

foreach my $linea (@database)
 {
   print "$linea\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2008-08-07 13:18 @595

Justo has dado con la solución de en medio... es decir... no has encontrado la solución...

Una manera es empezar como has hecho tu:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

open FICHERO, "<t.txt" or die "No se pudo localizar el archivo... \n";
my @database = <FICHERO>;
close(FICHERO);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero, entonces, si tienes todo el fichero leído en @database, entonces la última línea está en $database[-1].

Y la otra forma, la comentada antes es ir leyendo línea a línea:

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

my $linea;

open FICHERO, "<t.txt" or die "No se pudo localizar el archivo... \n";
while ( $linea = <FICHERO> ) {
}
close(FICHERO);

print $linea;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Darse cuenta de que $linea está definida fuera del bucle, para que podamos referirnos a ella también fuera, después del bucle.
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

Notapor Kiloko » 2008-08-07 13:45 @614

OK, comprendo la primera, y sale el resultado pero la segunda ¿¿seguro que está bien?? porque era lo que te comentaba que te da un error
Código: Seleccionar todo
Use of uninitialized value in string at linea2.pl line 10

porque está fuera de las { }

:?:
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Siguiente

Volver a Básico

¿Quién está conectado?

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