PDA

Visualizza la versione completa : Leggere un file di testo al contrario


roberto150
05-11-2007, 19:47
Devo leggere un file di testo dall'alto verso il basso, cioè dall'ultima riga alla prima.
Ho cercato un pò in giro e l'unica suggerimento che ho trovato è quello di usare la funzione "reverse", e cioè aprire il file e associarlo ad un array in questo modo:

@righe=reverse (<FILE>); #in questo modo ho il file al contrario all'interno dell'array

ma essendo il file composto da circa 1000 righe, allora la memoria va in overflow, quindi non mi resta che tentare un altra strada.
qualche suggerimento?

shishii
06-11-2007, 12:05
Usa i moduli: Tie::File

che trovi su http://search.cpan.org

come detto qua sotto:

Tie::File represents a regular text file as a Perl array. Each element in the array corresponds to a record in the file. The first line of the file is element 0 of the array; the second line is element 1, and so on.

The file is not loaded into memory, so this will work even for gigantic files.

Changes to the array are reflected in the file immediately.

è molto adatto a grandi files poichè adotta una gestione della memoria.

Poi potrai leggerlo al contrario usando il ciclo for, ad esempio:

for ($i = $#array; $i > 0; $i--) {
$array[$i]
}

roberto150
07-11-2007, 11:26
ho risolto usando il modulo

File::Readbackwards;

in questo modo precisamente:


# Apriamo il file di log leggendolo dal basso verso l'alto
$bw = File::ReadBackwards->new( $ARGV[0] ) or die "can't read 'log_file' $!" ;

#while( defined( $log_line = $bw->readline ) ) {
# print $log_line ;
# }

in questo modo stampa le righe del file dall'ultima alla prima.
grazie

Loading