Successivo: , Su: Funzionalità avanzate   [Contenuti][Indice]


12.1 Consentire dati di input non decimali

Se si esegue gawk con l’opzione --non-decimal-data, si possono avere valori in base diversa da dieci nei dati di input:

$ echo 0123 123 0x123 |
> gawk --non-decimal-data '{ printf "%d, %d, %d\n", $1, $2, $3 }'
-| 83, 123, 291

Affinché questa funzionalità sia disponibile, i programmi devono essere scritti in modo che gawk tratti i dati come valori numerici:

$ echo 0123 123 0x123 | gawk '{ print $1, $2, $3 }'
-| 0123 123 0x123

L’istruzione print tratta le sue espressioni come se fossero stringhe. Sebbene i campi possano comportarsi come numeri, quando necessario, essi rimangono sempre stringhe, per cui print non cerca di elaborarli come se fossero numeri. Si deve aggiungere zero a un campo affiché venga considerato come un numero. Per esempio:

$ echo 0123 123 0x123 | gawk --non-decimal-data '
> { print $1, $2, $3
>   print $1 + 0, $2 + 0, $3 + 0 }'
-| 0123 123 0x123
-| 83 123 291

Poiché capita comunemente di avere dati di tipo decimale con degli zeri iniziali, e poiché l’uso di questa funzionalità può portare a risultati inattesi, il comportamento di default è quello lasciarla disabilitata. Se si vuole, la si deve richiedere esplicitamente.

ATTENZIONE: L’uso di questa opzione non è consigliata. Può provocare errori molto seri eseguendo vecchi programmi. Al suo posto è meglio usare la funzione strtonum() per convertire i dati (vedi la sezione Funzioni di manipolazione di stringhe). Questo rende i programmi più facili da scrivere e più facili da leggere, e porta a risultati meno inattesi.

Quest’opzione potrebbe sparire dalle versioni future di gawk.


Successivo: , Su: Funzionalità avanzate   [Contenuti][Indice]