Contenuto principale

sprintf

Formattare i dati in stringa o vettore di caratteri

Descrizione

str = sprintf(formatSpec,A1,...,An) formatta i dati negli array A1,...,An utilizzando gli operatori di formattazione specificati da formatSpec e restituisce il testo risultante in str. La funzione sprintf formatta i valori in A1,...,An secondo l'ordine delle colonne. Se formatSpec è una stringa, lo è anche l'output str. In caso contrario, str è un vettore di caratteri.

Per restituire più parti di testo formattato come array di stringhe o array di celle di vettori di caratteri, utilizzare la funzione compose.

esempio

[str,errmsg] = sprintf(formatSpec,A1,...,An) restituisce un messaggio di errore come vettore di caratteri quando l'operazione non va a buon fine. In caso contrario, errmsg è vuoto.

str = sprintf(literalText) traduce le sequenze di caratteri di escape in literalText, come \n e \t. Restituisce tutti gli altri caratteri non modificati. Se literalText contiene un operatore di formattazione (come %f), str lo scarta insieme a tutti i caratteri successivi.

Esempi

comprimi tutto

Formattare un numero in virgola mobile utilizzando gli specificatori %e, %f e %g.

A = 1/eps;
str_e = sprintf('%0.5e',A)
str_e = 
'4.50360e+15'
str_f = sprintf('%0.5f',A)
str_f = 
'4503599627370496.00000'
str_g = sprintf('%0.5g',A)
str_g = 
'4.5036e+15'

Unire testo letterale con valori dell'array per creare un vettore di caratteri.

formatSpec = 'The array is %dx%d.';
A1 = 2;
A2 = 3;
str = sprintf(formatSpec,A1,A2)
str = 
'The array is 2x3.'

Per restituire un testo formattato come stringa, specificare formatSpec come stringa anziché come vettore di caratteri quando si chiama la funzione sprintf.

Convertire i dati e restituire il risultato come stringa.

formatSpec = "The current time is: %d:%d %s";
A1 = 11;
A2 = 20;
A3 = 'a.m.';
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 11:20 a.m."

Convertire la stringa di input. Gli array di input che contengono testo possono essere vettori di caratteri o stringhe.

A1 = 2;
A2 = 35;
A3 = "p.m.";
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 2:35 p.m."

Convertire esplicitamente i valori a doppia precisione in interi.

str = sprintf('%d',round(pi))
str = 
'3'

Specificare la larghezza minima del valore stampato.

str = sprintf('%025d',123456)
str = 
'0000000000000000000123456'

Il flag 0 nello specificatore di formato %025d richiede la presenza di zeri iniziali nell'output.

Riordinare i valori di input utilizzando l'identificatore di posizione n$.

A1 = 'X';
A2 = 'Y';
A3 = 'Z';
formatSpec = ' %3$s %2$s %1$s';
str = sprintf(formatSpec,A1,A2,A3)
str = 
' Z Y X'
C = { 1,   2,   3 ;
     'AA','BB','CC'};

str = sprintf(' %d %s',C{:})
str = 
' 1 AA 2 BB 3 CC'

La sintassi C{:} crea un elenco separato da virgole di array che includono il contenuto di ogni cella da C secondo l'ordine delle colonne. Ad esempio, C{1}==1 e C{2}=='AA'.

Argomenti di input

comprimi tutto

Formato dei campi di output, specificato utilizzando gli operatori di formattazione. formatSpec può inoltre includere testo ordinario e caratteri speciali.

Se formatSpec include testo letterale che rappresenta caratteri di escape, come \n, sprintf traduce i caratteri di escape.

formatSpec può essere un vettore di caratteri tra virgolette singole o uno scalare di stringa.

Operatore di formattazione

Un operatore di formattazione inizia con un segno di percentuale % e termina con un carattere di conversione. Il carattere di conversione è necessario. Opzionalmente, è possibile specificare operatori di identificazione, flag, larghezza del campo, precisione e sottotipo tra % e il carattere di conversione. (Gli spazi non sono validi tra gli operatori e sono qui mostrati solo per motivi di leggibilità).

Schematic of formatting operator characters.

Carattere di conversione

Questa tabella mostra i caratteri di conversione per formattare i dati numerici e di caratteri come testo.

Tipo di valoreConversioneDettagli

Intero, con segno

%d o %i

Base 10

Intero, senza segno

%u

Base 10

%o

Base 8 (ottale)

%x

Base 16 (esadecimale), lettere minuscole af

%X

Come %x, lettere maiuscole AF

Numero in virgola mobile

%f

Notazione in virgola fissa (utilizzare un operatore di precisione per specificare il numero di cifre dopo il punto decimale).

%e

Notazione esponenziale, ad esempio 3.141593e+00 (utilizzare un operatore di precisione per specificare il numero di cifre dopo il punto decimale).

%E

Come %e, ma in lettere maiuscole, ad esempio 3.141593E+00 (utilizzare un operatore di precisione per specificare il numero di cifre dopo il punto decimale).

%g

Il più compatto tra %e e %f, senza zeri finali (utilizzare un operatore di precisione per specificare il numero di cifre significative).

%G

Il più compatto tra %E e %f, senza zeri finali (utilizzare un operatore di precisione per specificare il numero di cifre significative).

Caratteri o stringhe

%c

Carattere singolo

%s

Vettore di caratteri o array di stringhe. Il tipo di testo di output è uguale al tipo di formatSpec.

Operatori opzionali

Gli operatori opzionali di identificazione, flag, larghezza del campo, precisione e sottotipo definiscono ulteriormente il formato del testo di output.

  • Identificatore

    Ordine di elaborazione degli argomenti di input della funzione. Utilizzare la sintassi n$, dove n rappresenta le posizioni degli altri argomenti di input nella chiamata di funzione.

    Esempio: ('%3$s %2$s %1$s %2$s','A','B','C') stampa gli argomenti di input 'A', 'B', 'C' come segue: C B A B.

    Nota: se un argomento di input è un array, non è possibile utilizzare gli identificatori per specificare particolari elementi dell'array da quell'argomento di input.

  • Flag

    '–'

    Allinea a sinistra.
    Esempio: %-5.2f
    Esempio: %-10s

    '+'

    Stampa sempre un carattere segno (+ o -) per qualsiasi valore numerico.
    Esempio: %+5.2f
    Allinea testo a destra.
    Esempio: %+10s

    ' '

    Inserisce uno spazio prima del valore.
    Esempio: % 5.2f

    '0'

    Riempie la larghezza del campo con zeri prima del valore.
    Esempio: %05.2f

    '#'

    Modifica le conversioni numeriche selezionate:

    • Per %o, %x o %X, stampa il prefisso 0, 0x o 0X.

    • Per %f, %e o %E, stampa il punto decimale anche quando la precisione è 0.

    • Per %g o %G, non rimuove gli zeri finali o il punto decimale.

    Esempio: %#5.0f

  • Larghezza del campo

    Numero minimo di caratteri da stampare. L'operatore di larghezza del campo può essere un numero o un asterisco (*) per riferirsi a un argomento di input.

    Quando si specifica * come operatore di larghezza del campo, gli altri argomenti di input devono fornire sia una larghezza che un valore da stampare. Le larghezze e i valori possono essere coppie di argomenti o coppie all'interno di un array numerico. Con * come operatore di larghezza del campo, è possibile stampare valori diversi con larghezze diverse.

    Esempio: gli argomenti di input ('%12d',intmax) sono equivalenti a ('%*d',12,intmax).

    Esempio: gli argomenti di input ('%*d',[2 10 5 100]) restituiscono '10 100', con due spazi allocati per 10 e cinque spazi allocati per 100. Come alternativa, è possibile specificare le larghezze e i valori dei campi come argomenti multipli, come in ('%*d',2,10,5,100).

    La funzione riempie la larghezza del campo con spazi prima del valore, a meno che non sia specificato diversamente dai flag.

  • Precisione

    Per %f, %e o %E

    Numero di cifre a destra del punto decimale
    Esempio: '%.4f' stampa pi come '3.1416'

    Per %g o %G

    Numero di cifre significative
    Esempio: '%.4g' stampa pi come '3.142'

    L'operatore di precisione può essere un numero o un asterisco (*) per riferirsi a un argomento.

    Quando si specifica * come operatore di precisione del campo, gli altri argomenti di input devono fornire sia una precisione che un valore da stampare. Le precisioni e i valori possono essere coppie di argomenti o coppie all'interno di un array numerico. Con * come operatore di precisione, è possibile stampare valori diversi con precisioni diverse.

    Quando si specificano *.* come operatori di larghezza e di precisione del campo, è necessario specificare le larghezze, le precisioni e i valori del campo come terzine.

    Esempio: gli argomenti di input ('%.4f',pi) sono equivalenti a ('%.*f',4,pi).

    Esempio: gli argomenti di input ('%6.4f',pi) sono equivalenti a ('%*.*f',6,4,pi).

    Esempio: gli argomenti di input ('%*.*f',6,4,pi,9,6,exp(1)) restituiscono '3.1416 2.718282', con 9 e 6 come larghezza del campo e precisione per l'output di exp(1).

    Nota

    Se si specifica un operatore di precisione per i valori in virgola mobile che supera la precisione del tipo di dati numerici di input, i risultati potrebbero non corrispondere ai valori di input con la precisione specificata. Il risultato dipende dall'hardware e dal sistema operativo del computer.

  • Sottotipi

    È possibile utilizzare un operatore di sottotipo per stampare un valore in virgola mobile come valore ottale, decimale o esadecimale. L'operatore di sottotipo precede immediatamente il carattere di conversione. Questa tabella mostra le conversioni che possono utilizzare i sottotipi.

    Tipo di valore di input

    Sottotipo e carattere di conversione

    Tipo di valore di output

    Numero in virgola mobile

    %bx o %bX
    %bo
    %bu

    Valore esadecimale, ottale o decimale a doppia precisione
    Esempio: %bx stampa pi come 400921fb54442d18

    %tx o %tX
    %to
    %tu

    Valore esadecimale, ottale o decimale a precisione singola
    Esempio: %tx stampa pi come 40490fdb

Testo prima o dopo gli operatori di formattazione

formatSpec può anche includere testo ulteriore prima di un segno di percentuale % o dopo un carattere di conversione. Il testo può essere:

  • Testo ordinario da stampare.

  • Caratteri speciali che non possono essere inseriti come testo normale. Questa tabella mostra come rappresentare i caratteri speciali in formatSpec.

    Carattere speciale

    Rappresentazione

    Virgolette singole

    ''

    Carattere percentuale

    %%

    Barra retroversa

    \\

    Allarme

    \a

    Backspace

    \b

    Avanzamento pagina

    \f

    Nuova riga

    \n

    Ritorno a capo

    \r

    Tabulazione orizzontale

    \t

    Tabulazione verticale

    \v

    Carattere il cui valore numerico Unicode® può essere rappresentato dal numero esadecimale N

    \xN

    Esempio: sprintf('\x5A') restituisce 'Z'

    Carattere il cui valore numerico Unicode può essere rappresentato dal numero ottale N

    \N

    Esempio: sprintf('\132') restituisce 'Z'

Comportamenti significativi delle conversioni con gli operatori di formattazione

  • Se si specifica una conversione che non si adatta ai dati, come una conversione di testo per un valore numerico, MATLAB® sovrascrive la conversione specificata e utilizza %e.

    Esempio: '%s' converte pi in 3.141593e+00.

  • Se si applica una conversione di testo (%c o %s) a valori interi, MATLAB converte i valori che corrispondono a codici di carattere validi in caratteri.

    Esempio: '%s' converte [65 66 67] in ABC.

Array numerico, di caratteri o di stringhe.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Testo di input senza operatori di formattazione, specificato come vettore di caratteri o scalare di stringa. sprintf traduce qualsiasi sequenza di caratteri di escape in literalText.

Tipi di dati: char | string

Argomenti di output

comprimi tutto

Testo formattato, restituito come vettore di caratteri o scalare di stringa. Il tipo di output corrisponde al tipo di formatSpec.

Messaggio di errore, restituito come vettore di caratteri, quando l'operazione non va a buon fine. In caso contrario, errmsg è vuoto.

Suggerimenti

  • La funzione sprintf è simile a fprintf, ma fprintf stampa su un file o nella finestra di comando.

  • Gli specificatori di formato per le funzioni di lettura sscanf e fscanf differiscono dai formati per le funzioni di scrittura sprintf e fprintf. Le funzioni di lettura non supportano un campo di precisione. Il campo della larghezza specifica un minimo per la scrittura, ma un massimo per la lettura.

  • Se si specifica un operatore di formattazione o un carattere speciale non valido, sprintf stampa tutto il testo fino all'operatore o al carattere non valido e scarta il resto.

    Esempio: se formatSpec è 'value = %z', sprintf stampa 'value =' in quanto %z non è un operatore di formattazione.

    Esempio: se formatSpec è 'character \x99999 = %s', sprintf stampa 'character' in quanto \x99999 non è un carattere speciale valido.

Riferimenti

[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Inc., 1988.

[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.

Funzionalità estese

espandi tutto

Cronologia versioni

Introduzione prima di R2006a