Successivo: , Precedente: , Su: Istruzioni   [Contenuti][Indice]


7.4.9 L’istruzione nextfile

L’istruzione nextfile è simile all’istruzione next. Tuttavia, invece di terminare l’elaborazione del record corrente, l’istruzione nextfile richiede ad awk di terminare di elaborare il file-dati corrente.

Alla fine dell’esecuzione dell’istruzione nextfile, FILENAME è aggiornato per contenere il nome del successivo file-dati elencato sulla riga di comando, FNR è reimpostato a uno, e l’elaborazione riparte con la prima regola del programma. Se l’istruzione nextfile raggiunge la fine dei file in input, vengono eseguite le eventuali regole END presenti. Un’eccezione a questo si ha se nextfile è invocata durante l’esecuzione di qualche istruzione all’interno di una regola END; in questo caso, il programma viene terminato immediatamente. Vedi la sezione I criteri di ricerca speciali BEGIN ed END.

L’istruzione nextfile è utile quando ci sono parecchi file-dati da elaborare, ma non è necessario elaborare ogni record in ogni file. Senza nextfile, per passare al successivo file-dati, un programma dovrebbe continuare a leggere i record che non gli servono. L’istruzione nextfile è una maniera molto più efficiente per ottenere lo stesso risultato.

In gawk, l’esecuzione di nextfile produce ulteriori effetti: le eventuali regole ENDFILE sono eseguite se gawk non si trova correntemente all’interno di una regola END o BEGINFILE; ARGIND è incrementato e le eventuali regole BEGINFILE sono eseguite. (ARGIND non è stato ancora trattato. Vedi la sezione Variabili predefinite.)

In gawk, nextfile è utile all’interno di una regola BEGINFILE per evitare di elaborare un file che altrimenti causerebbe un errore fatale in gawk. In questo caso, le regole ENDFILE non vengono eseguite. Vedi la sezione I criteri di ricerca speciali BEGINFILE ed ENDFILE.

Sebbene possa sembrare che ‘close(FILENAME)’ ottenga lo stesso risultato di nextfile, non è così. close() può essere usato solo per chiudere file, pipe e coprocessi che siano stati aperti tramite ridirezioni. Non ha niente a che vedere con l’elaborazione principale che awk fa dei file elencati in ARGV.

NOTA: Per molti anni, nextfile è stata un’estensione comune. A settembre 2012 si è deciso di includerla nello standard POSIX. Si veda il sito web dell’Austin Group.

Le versioni correnti di BWK awk e mawk entrambe prevedono nextfile. Tuttavia, non sono consentite istruzioni nextfile all’interno del corpo delle funzioni (vedi la sezione Funzioni definite dall’utente). gawk lo permette; una nextfile all’interno del corpo di una funzione legge il primo record del file successivo e inizia l’elaborazione dello stesso a partire dalla prima regola del programma, esattamente come farebbe qualsiasi altra istruzione nextfile.


Successivo: , Precedente: , Su: Istruzioni   [Contenuti][Indice]