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


4.9.4 Usare getline in una variabile da un file

Si usa ‘getline var < file’ per leggere l’input dal file file, e metterlo nella variabile var. Come prima, file è un’espressione di tipo stringa che specifica il file dal quale legggere.

In questa versione di getline, nessuna delle variabili predefinite è cambiata e il record non è diviso in campi. La sola variabile cambiata è var.25 Per esempio, il seguente programma copia tutti i file in input nell’output, ad eccezione dei record che dicono ‘@include nomefile. Tale record è sostituito dal contenuto del file nomefile:

{
     if (NF == 2 && $1 == "@include") {
          while ((getline line < $2) > 0)
               print line
          close($2)
     } else
          print
}

Si noti come il nome del file in input aggiuntivo non compaia all’interno del programma; è preso direttamente dai dati, e precisamente dal secondo campo della riga di @include.

La funzione close() viene chiamata per assicurarsi che se nell’input appaiono due righe @include identiche, l’intero file specificato sia incluso ogni volta. Vedi Chiusura file e pipe.

Una carenza di questo programma è che non gestisce istruzioni @include nidificate (cioè, istruzioni @include contenute nei file inclusi) nel modo in cui ci si aspetta che funzioni un vero preelaboratore di macro. Vedi Programma igawk per un programma che gestisce le istruzioni @include nidificate.


Note a piè di pagina

(25)

Questo non è completamente vero. RT può essere cambiato se RS è un’espressione regolare.