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


7.4.8 L’istruzione next

L’istruzione next fa sì che awk termini immediatamente l’elaborazione del record corrente e proceda a elaborare il record successivo. Ciò vuol dire che nessuna delle eventuali regole successive viene eseguita per il record corrente e che il resto delle azioni presenti nella regola correntemente in esecuzione non viene eseguito.

Si confronti quanto sopra con quel che fa la funzione getline (vedi la sezione Richiedere input usando getline). Anch’essa fa sì che awk legga il record successivo immediatamente, ma non altera il flusso del controllo in alcun modo (cioè, il resto dell’azione in esecuzione prosegue con il nuovo record in input).

Al livello più alto, l’esecuzione di un programma awk è un ciclo che legge un record in input e quindi confronta il criterio di ricerca di ciascuna regola con il record stesso. Se si vede questo ciclo come un for il cui corpo contiene le regole, l’istruzione next è analoga a un’istruzione continue. Salta, cioè, alla fine del corpo di questo ciclo implicito ed esegue l’incremento (ovvero legge un altro record).

Per esempio, si supponga che un programma awk agisca solo su record che hanno quattro campi, e che non dovrebbe terminare con un errore se trova dei record in input non validi. Per evitare di complicare il resto del programma, si può scrivere una regola “filtro” a inizio programma, come mostrato in questo esempio:

NF != 4 {
    printf("%s:%d: salto: NF != 4\n", FILENAME, FNR) > "/dev/stderr"
    next
}

Siccome è presente un next, le regole successive del programma non elaboreranno i record non validi. Il messaggio è ridiretto al flusso in output standard error, sul quale vanno scritti i messaggi di errore. Per maggiori dettagli, si veda Nomi-file speciali in gawk.

Se l’istruzione next provoca il raggiungimento della fine del file in input, vengono eseguite le eventuali regole END presenti. Vedi la sezione I criteri di ricerca speciali BEGIN ed END.

L’istruzione next non è consentita all’interno delle regole BEGINFILE ed ENDFILE. Vedi la sezione I criteri di ricerca speciali BEGINFILE ed ENDFILE.

Secondo lo standard POSIX, il comportamento di awk è indefinito se next è usato in una regola BEGIN o END. gawk considera questo come un errore di sintassi. Sebbene POSIX non proibisca di usarlo, molte altre implementazioni di awk non consentono che l’istruzione next sia usata all’interno del corpo di funzioni. (vedi la sezione Funzioni definite dall’utente). Come tutte le altre istruzioni next, un’istruzione next all’interno del corpo di una funzione legge il record successivo e inizia a elaborarlo a partire dalla prima regola del programma.


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