Precedente: , Su: Conversione   [Contenuti][Indice]


6.1.4.2 Le localizzazioni possono influire sulle conversioni

Il luogo dove si è può avere importanza quando si tratta di convertire numeri e stringhe. La lingua e i caratteri — la localizzazione — possono influire sui formati numerici. In particolare, per i programmi awk, influiscono sui caratteri separatore decimale e separatore delle migliaia. La localizzazione "C", e la maggior parte delle localizzazioni inglesi, usano il punto (‘.’) come separatore decimale e non prevedono un separatore delle migliaia. Tuttavia, molte (se non la maggior parte) delle localizzazioni europee e non inglesi usano la virgola (‘,’) come separatore dei decimali. Le localizzazioni europee spesso usano o lo spazio o il punto come separatore delle migliaia, all’occorrenza.

Lo standard POSIX prevede che awk usi sempre il punto come separatore dei decimali nel codice sorgente del programma awk, e per gli assegnamenti di variabile da riga di comando (vedi la sezione Altri argomenti della riga di comando). Tuttavia, nell’interpretazione dei dati in input, per l’output di print e printf, e per la conversione da numeri a stringhe, viene usato il separatore decimale locale. (a.b.) In ogni caso, i numeri nel codice sorgente e nei dati di input non possono avere un separatore delle migliaia. Di seguito sono riportati alcuni esempi che illustrano la differenza di comportamento, su un sistema GNU/Linux:

$ export POSIXLY_CORRECT=1                        Forzare aderenza a standard POSIX
$ gawk 'BEGIN { printf "%g\n", 3.1415927 }'
-| 3.14159
$ LC_ALL=en_DK.utf-8 gawk 'BEGIN { printf "%g\n", 3.1415927 }'
-| 3,14159
$ echo 4,321 | gawk '{ print $1 + 1 }'
-| 5
$ echo 4,321 | LC_ALL=en_DK.utf-8 gawk '{ print $1 + 1 }'
-| 5,321

La localizzazione en_DK.utf-8 è per l’inglese in Danimarca, dove le virgole fungono da separatore decimale. Nella localizzazione "C" normale, gawk tratta ‘4,321’ come 4, mentre nella localizzazione danese è trattato come numero completo comprendente la parte frazionaria, 4.321.

Alcune delle prime versioni di gawk si conformavano completamente con quest’aspetto dello standard. Tuttavia, molti utenti di localizzazioni non inglesi si lamentavano di questo comportamento, perché i loro dati usavano il punto come separatore decimale, per cui fu ripristinato il comportamento di default che usava il punto come carattere di separazione decimale. Si può usare l’opzione --use-lc-numeric (vedi la sezione Opzioni sulla riga di comando) per forzare gawk a usare il carattere separatore decimale della localizzazione. (gawk usa il separatore decimale della localizzazione anche quando è in modalità POSIX, o con l’opzione --posix o con la variabile d’ambiente POSIXLY_CORRECT, come appena visto.)

Tabella 6.1 descrive i casi in cui si usa il separatore decimale locale e quando si usa il punto. Alcune di queste funzionalità non sono state ancora descritte.

FunzioneDefault--posix o --use-lc-numeric
%'gUsa la localizzazioneUsa la localizzazione
%gUsa il puntoUsa la localizzazione
InputUsa il puntoUsa la localizzazione
strtonum()Usa il puntoUsa la localizzazione

Tabella 6.1: Separatore decimale locale o punto

Infine, gli standard ufficiali correnti e la rappresentazione dei numeri in virgola mobile dello standard IEEE possono avere un effetto insolito ma importante sul modo in cui gawk converte alcuni valori di stringa speciali in numeri. I dettagli sono illustrati in Confronto tra standard e uso corrente.


Precedente: , Su: Conversione   [Contenuti][Indice]