Precedente: Stringhe e numeri, Su: Conversione [Contenuti][Indice]
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.
Funzione | Default | --posix o --use-lc-numeric |
---|---|---|
%'g | Usa la localizzazione | Usa la localizzazione |
%g | Usa il punto | Usa la localizzazione |
Input | Usa il punto | Usa la localizzazione |
strtonum() | Usa il punto | Usa la localizzazione |
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: Stringhe e numeri, Su: Conversione [Contenuti][Indice]