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]