Precedente: Consentire dati a fine record, Su: Dimensione costante [Contenuti][Indice]
Fin qui, tutto bene. Ma cosa succede se non ci sono abbastanza dati
rispetto a quelli che dovrebbero essere presenti in base alla descrizione
contenuta in FIELDWIDTHS
? E invece cosa succede se i dati sono
più di quelli previsti?
Per molti anni, quel che succede in questi casi non era definito con esattezza. A partire dalla versione 4.2 le regole sono le seguenti:
Per esempio, se FIELDWIDTHS
è impostato a "2 3 4"
e il record
in input è ‘aabbb’. In questo caso, NF
è impostato a due.
Per esempio, se FIELDWIDTHS
è impostato a "2 3 4"
e il record
in input è ‘aab’. In questo caso, NF
è impostato a due e
il campo numero $2
ha come valore "b"
. L’idea è che, anche se
ci sono meno caratteri di quelli previsti, qualcosa è presente, e quindi il
dato dovrebbe essere reso disponibile al programma.
Per esempio, se FIELDWIDTHS
è impostato a "2 3 4"
e il record
in input è ‘aabbbccccddd’. In questo caso, NF
è impostato a
tre e i caratteri in eccesso (‘ddd’) sono ignorati. Se si vuole che
gawk
elabori i caratteri in più, si deve aggiungere un ‘*’
in fondo, nel valore di FIELDWIDTHS
.
Per esempio, se FIELDWIDTHS
è impostato a "2 3 4 *"
e il record
in input è ‘aabbbccccddd’. In questo caso, NF
è impostato a
quattro, e $4
ha come valore "ddd"
.
L’assegnazione di un valore a FS
fa sì che gawk
usi FS
per separare nuovamente i campi. Si può usare ‘FS = FS’ per ottenere
questo effetto, senza dover conoscere il valore corrente di FS
.
Per vedere quale tipo di separazione sia in atto,
si può usare PROCINFO["FS"]
(vedi la sezione Variabili predefinite con cui awk
fornisce informazioni).
Il suo valore è "FS"
se si usa la normale separazione in campi,
o "FIELDWIDTHS"
se si usa la separazione in campi a larghezza fissa:
if (PROCINFO["FS"] == "FS") separazione in campi normale… else if (PROCINFO["FS"] == "FIELDWIDTHS") separazione in campi a larghezza fissa… else separazione dei campi in base al contenuto… (si veda la sezione successiva)
Quest’informazione è utile quando si scrive una funzione che
necessita di cambiare temporaneamente FS
o FIELDWIDTHS
,
leggere alcuni record, e poi ripristinare le impostazioni originali
(vedi la sezione Leggere la lista degli utenti,
per un esempio di tale funzione).
Precedente: Consentire dati a fine record, Su: Dimensione costante [Contenuti][Indice]