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


5.5.2 Lettere di controllo del formato

Uno specificatore di formato inizia col carattere ‘%’ e termina con una lettera di controllo del formato; e dice all’istruzione printf come stampare un elemento. La lettera di controllo del formato specifica che tipo di valore stampare. Il resto dello specificatore di formato è costituito da modificatori opzionali che controllano come stampare il valore, per esempio stabilendo la larghezza del campo. Ecco una lista delle lettere di controllo del formato:

%a, %A

Un numero in virgola mobile scritto nella forma [-]0xh.hhhhp+-dd (formato esadecimale virgola mobile nel compilatore C99). Per %A, si usano lettere maiuscole invece che lettere minuscole.

NOTA: Lo standard POSIX in vigore richiede il supporto di %a e di %A in awk. Per quanto ci consta, oltre a gawk, la sola altra versione di awk che fornisce questo supporto è BWK awk. Se si usano questi formati, il programma in questione è quindi estremamente non-portabile!

Inoltre, questi formati non sono disponibili su alcun sistema in cui la funzione di libreria C printf() utilizzata da gawk non li supporta. Al momento in cui questo libro è stato scritto, fra i sistemi su cui è stato portato gawk, il solo sistema noto che non li supporta è OpenVMS.

%c

Stampa un numero come un carattere; quindi, ‘printf "%c", 65’ stampa la lettera ‘A’. L’output per un valore costituito da una stringa è il primo carattere della stringa stessa.

NOTA: Lo standard POSIX richiede che il primo carattere di una stringa sia stampato. In localizzazioni con caratteri multibyte, gawk tenta di convertire i primi byte della stringa in un carattere multibyte valido e poi di stampare la codifica multibyte di quel carattere. Analogamente, nella stampa di un valore numerico, gawk ammette che il valore appartenga all’intervallo numerico di valori che possono essere contenuti in un carattere multibyte. Se la conversione alla codifica multibyte non riesce, gawk usa gli ultimi otto bit della cifra (quelli meno significativi) come carattere da stampare.

Altre versioni di awk generalmente si limitano a stampare il primo byte di una stringa o i valori numerici che possono essere rappresentati in un singolo byte (0–255). (a.b.)

%d, %i

Stampa un numero intero in base decimale. Le due lettere di controllo sono equivalenti. (La specificazione ‘%i’ è ammessa per compatibilità con ISO C.)

%e, %E

Stampa un numero nella notazione scientifica (con uso di esponente). Per esempio:

printf "%4.3e\n", 1950

stampa ‘1.950e+03’, con un totale di quattro cifre significative, tre delle quali seguono il punto che separa la parte intera da quella decimale [in Italia si usa la virgola al posto del punto] (L’espressione ‘4.3’ rappresenta due modificatori, introdotti nella prossima sottosezione). ‘%E’ usa ‘E’ invece di ‘e’ nell’output.

%f

Stampa un numero in notazione in virgola mobile. Per esempio:

printf "%4.3f", 1950

stampa ‘1950.000’, con un minimo di quattro cifre significative, tre delle quali vengono dopo il punto decimale. (L’espressione ‘4.3’ rappresenta due modificatori, introdotti nella prossima sottosezione).

In sistemi che implementano il formato in virgola mobile, come specificato dallo standard IEEE 754, il valore infinito negativo è rappresentato come ‘-inf’ o ‘-infinity’, e l’infinito positivo come ‘inf’ o ‘infinity’. Il valore speciale “not a number” [non è un numero] viene scritto come ‘-nan’ o ‘nan’ (vedi la sezione Altre cose da sapere).

%F

Come ‘%f’, ma i valori di infinito e di “not a number” sono scritti in lettere maiuscole.

Il formato ‘%F’ è un’estensione POSIX allo standard ISO C; non tutti i sistemi lo prevedono. In tali casi, gawk usa il formato ‘%f’.

%g, %G

Stampa un numero usando o la notazione scientifica o quella in virgola mobile, scegliendo la forma più concisa; se il risultato è stampato usando la notazione scientifica, ‘%G’ usa ‘E’ invece di ‘e’.

%o

Stampa un numero intero in ottale, senza segno (vedi la sezione Numeri ottali ed esadecimali).

%s

Stampa una stringa.

%u

Stampa un numero intero decimale, senza segno. (Questo formato è poco usato, perché tutti i numeri in awk sono in virgola mobile; è disponibile principalmente per compatibilità col linguaggio C.)

%x, %X

Stampa un intero esadecimale senza segno; ‘%X’ usa le lettere da ‘A’ a ‘F’ invece che da ‘a’ a ‘f’ (vedi la sezione Numeri ottali ed esadecimali).

%%

Stampa un solo carattere ‘%’. Questa notazione non serve per stampare alcun argomento e ignora eventuali modificatori.

NOTA: Quando si usano lettere di controllo del formato per numeri interi per stampare valori esterni all’intervallo massimo disponibile nel linguaggio C per i numeri interi, gawk usa lo specificatore di formato ‘%g’. Se si specifica l’opzione --lint sulla riga di comando (vedi la sezione Opzioni sulla riga di comando), gawk emette un messaggio di avvertimento. Altre versioni di awk possono stampare valori non validi, o comportarsi in modo completamente differente. (a.b.)

NOTA: Lo standard IEEE 754 per l’aritmetica in virgola mobile consente di avere valori speciali per rappresentare “infinito” (sia positivo che negativo) e valori che sono “non numerici” (NaN - [Not a Number]).

L’input e l’output di tali valori avviene sotto forma di stringhe di testo. Ciò pone dei problemi nel linguaggio awk, che esisteva già prima della definizione dello standard IEEE. Dettagli ulteriori si possono trovare in Confronto tra standard e uso corrente; si prega di fare riferimento a quel testo.


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