-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[27] Come posso leggere un intero file tutto in una volta? slurp file, slurping

Potete usare il modulo File::Slurp per fare questo in un solo passo.

	use File::Slurp;
	$tutto_quanto = read_file($nomefile); # l'intero file in uno scalare
    	@tutte_le_linee = read_file($nomefile); # una linea per elemento

L'approccio proprio del Perl per svolgere un'operazione su tutte le linee di un file, consiste nel farlo una linea alla volta:

    open (INPUT, $file)     || die "non posso aprire $file: $!";
    while (<INPUT>) {
        chomp;
        # fai qualcosa con $_
    }
    close(INPUT)            || die "non posso chiudere $file: $!";

Questo è tremendamente più efficiente del leggere l'intero file in memoria come un array di linee e poi svolgere l'operazione su di esso un elemento alla volta, che è spesso--se non quasi sempre--l'approccio sbagliato. Tutte le volte che vedete questo:

    @linee = <INPUT>;

dovreste pensare a lungo e accuratamente sul perché avete bisogno di avere tutto caricato in una volta. È semplicemente una soluzione non scalabile. Potreste anche trovare più divertente l'uso del modulo standard Tie::File, o i binding $DB_RECNO del modulo DB_File, che vi permettono di legare un array ad un file in maniera tale che accedendo ad un elemento dell'array di fatto si acceda alla linea corrispondente nel file.

Potete leggere l'intero contenuto del filehandle in uno scalare

    {
        local(*INPUT, $/);
        open (INPUT, $file)     || die "non posso aprire $file: $!";
        $variabile = <INPUT>;
    }

Quel codice rende temporaneamente indefinito il vostro separatore di record, e chiuderà automaticamente il file all'uscita del blocco. Se il file è già aperto, limitatevi ad usare questo:

    $variabile = do { local $/; <INPUT> };

Per i file ordinari potete inoltre usare la funzione read.

    read( INPUT, $variabile, -s INPUT );

Il terzo argomento verifica la dimensione in byte dei dati sul filehandle INPUT e legge quel numero di byte nel buffer $variabile.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google