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


4.10.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 la sezione Chiudere ridirezioni in input e in output.

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 la sezione Una maniera facile per usare funzioni di libreria 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.