Successivo: Ignorare assegnamenti di variabili, Precedente: Controllo di file, Su: Gestione File Dati [Contenuti][Indice]
Tutte le implementazioni note di awk
ignorano senza
mandare alcun messaggio i file di
lunghezza zero. Questo è un effetto collaterale del ciclo implicito di
awk
"leggi un record e confrontalo con le regole": quando
awk
cerca di leggere un record da un file vuoto, riceve immediatamente
un’indicazione di fine-file [end-of-file], chiude il file,
e prosegue con il
successivo file-dati presente nella riga di comando, senza
eseguire alcun codice
di programma awk
a livello di utente.
Usando la variabile ARGIND
di gawk
(vedi la sezione Variabili predefinite), è possibile accorgersi quando un file-dati
è stato saltato. Simile al file di libreria illustrato in
Trovare i limiti dei file-dati, il seguente file di libreria chiama una funzione
di nome zerofile()
che l’utente deve fornire. Gli argomenti passati
sono il nome-file e la posizione del file in ARGV
:
# zerofile.awk --- file di libreria per elaborare file in input vuoti BEGIN { Argind = 0 } ARGIND > Argind + 1 { for (Argind++; Argind < ARGIND; Argind++) zerofile(ARGV[Argind], Argind) } ARGIND != Argind { Argind = ARGIND } END { if (ARGIND > Argind) for (Argind++; Argind <= ARGIND; Argind++) zerofile(ARGV[Argind], Argind) }
La variabile definita dall’utente Argind
permette al programma
awk
di tracciare il suo percorso all’interno di ARGV
. Ogniqualvolta il
programma rileva che ARGIND
è maggiore di ‘Argind + 1’, vuol dire
che uno o più file vuoti sono stati tralasciati. L’azione chiama poi
zerofile()
per ogni file che è stato saltato, incrementando
ogni volta Argind
.
La regola ‘Argind != ARGIND’ tiene semplicemente aggiornato Argind
nel caso che non ci siano file vuoti.
Infine, la regola END
prende in considerazione il caso di un qualsiasi
file vuoto alla fine degli argomenti nella riga di comando. Si noti che nella
condizione del ciclo for
, la verifica usa l’operatore ‘<=’, non
‘<’.
Successivo: Ignorare assegnamenti di variabili, Precedente: Controllo di file, Su: Gestione File Dati [Contenuti][Indice]