Successivo: Apici alla shell, Precedente: Funzione getlocaltime, Su: Funzioni di tipo generale [Contenuti][Indice]
Spesso è conveniente avere il contenuto di un intero file disponibile in memoria, visto come un’unica stringa. Un modo chiaro e semplice per far ciò potrebbe essere questo:
function readfile1(file, temp, contenuto) { if ((getline temp < file) < 0) return contenuto = temp RT while ((getline temp < file) > 0) contenuto = contenuto temp RT close(file) return contenuto }
Questa funzione legge da file
un record alla volta, ricostruendo
l’intero contenuto del file nella variabile locale contenuto
.
Funziona, ma non è detto che sia efficiente.
La funzione seguente, basata su un suggerimento di Denis Shirokov, legge l’intero contenuto del file in un colpo solo:
# readfile.awk --- legge un intero file in un colpo solo function readfile(file, temp, salva_rs) { salva_rs = RS RS = "^$" getline temp < file close(file) RS = salva_rs return temp }
Funziona impostando RS
a ‘^$’, un’espressione regolare che
non trova nessuna corrispondenza se il file ha un contenuto.
gawk
legge i dati dal file contenuto in temp
, tentando di trovare una
corrispondenza con RS
.
La ricerca dopo ogni lettura non ha mai successo, ma termina
rapidamente, e quindi gawk
inserisce in
temp
l’intero contenuto del file.
(Vedi la sezione Controllare come i dati sono suddivisi in record per informazioni su RT
e RS
.)
Se file
è vuoto, il codice di ritorno è la stringa vuota.
Quindi, il codice chiamante può usare qualcosa simile a questo:
contenuto = readfile("/qualche/percorso") if (length(contenuto) == 0) # file vuoto …
La verifica serve a determinare se il file è vuoto o no. Una verifica equivalente potrebbe essere ‘contenuto == ""’.
Vedi la sezione Leggere un intero file in una stringa per una funzione di estensione anch’essa finalizzata a leggere un intero file in memoria.
Successivo: Apici alla shell, Precedente: Funzione getlocaltime, Su: Funzioni di tipo generale [Contenuti][Indice]