Successivo: , Precedente: , Su: Gestione File Dati   [Contenuti][Indice]


10.3.4 Ricerca di file di lunghezza zero

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: , Precedente: , Su: Gestione File Dati   [Contenuti][Indice]