fprintf
Scrivere i dati in un file di testo
Descrizione
fprintf( applica fileID,formatSpec,A1,...,An)formatSpec tutti gli elementi degli array A1,...An in ordine di colonna e scrive i dati in un file di testo. fprintf utilizza lo schema di codifica specificato nella chiamata a fopen.
fprintf( formatta i dati e visualizza i risultati sullo schermo.formatSpec,A1,...,An)
Esempi
Stampare sullo schermo valori numerici multipli e testo letterale.
A1 = [9.9, 9900]; A2 = [8.8, 7.7 ; ... 8800, 7700]; formatSpec = 'X is %4.2f meters or %8.3f mm\n'; fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm X is 8.80 meters or 8800.000 mm X is 7.70 meters or 7700.000 mm
%4.2f nell'input formatSpec specifica che il primo valore in ciascuna riga di output è un numero in virgola mobile con una larghezza del campo di quattro cifre, incluse le due cifre dopo il punto decimale. %8.3f nell'input formatSpec specifica che il secondo valore in ciascuna riga di output è un numero in virgola mobile con una larghezza del campo di otto cifre, incluse le tre cifre dopo il punto decimale. \n è un carattere di controllo che inizia una nuova riga.
Convertire esplicitamente i valori a doppia precisione con frazioni in valori interi.
a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));1 3 5
%d nell'input formatSpec stampa ciascun valore del vettore round(a), come un numero intero con segno. \n è un carattere di controllo che inizia una nuova riga.
Scrivere una breve tabella della funzione esponenziale in un file di testo chiamato exp.txt.
x = 0:.1:1; A = [x; exp(x)]; fileID = fopen('exp.txt','w'); fprintf(fileID,'%6s %12s\n','x','exp(x)'); fprintf(fileID,'%6.2f %12.8f\n',A); fclose(fileID);
La prima chiamata a fprintf stampa il testo dell'intestazione x e exp(x), mentre la seconda chiamata stampa i valori della variabile A.
Se si intende leggere il file con il Blocco note di Microsoft®, utilizzare '\r\n' anziché '\n' per passare a una nuova riga. Ad esempio, sostituire le chiamate a fprintf con quanto segue:
fprintf(fileID,'%6s %12s\r\n','x','exp(x)'); fprintf(fileID,'%6.2f %12.8f\r\n',A);
Le funzioni di importazione di MATLAB®, tutte le applicazioni di UNIX® e Microsoft Word e WordPad riconoscono '\n' come indicatore di nuova riga.
Visualizzare il contenuto del file con il comando type.
type exp.txtx exp(x) 0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183
Scrivere dati in un file e restituire il numero di byte scritti.
Scrivere un array di dati A in un file e ottenere il numero di byte che scrive fprintf.
A = magic(4); fileID = fopen('myfile.txt','w'); nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96
La funzione fprintf ha scritto 96 byte nel file.
Chiudere il file.
fclose(fileID);
Visualizzare il contenuto del file con il comando type.
type('myfile.txt') 16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
Visualizzare un collegamento ipertestuale (Il sito web di MathWorks) sullo schermo.
url = 'https://www.mathworks.com'; sitename = 'The MathWorks Web Site'; fprintf('<a href = "%s">%s</a>\n',url,sitename)
%s nell'input formatSpec indica che i valori delle variabili url e sitename, devono essere stampati come testo.
Argomenti di input
Identificatore di file, specificato in uno dei seguenti modi:
Un identificatore di file ottenuto da
fopen.fprintfnon supporta la scrittura su URL di Internet.1per l'output standard (lo schermo).2per l'errore standard.
Tipi di dati: double
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, fprintf 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à).

Carattere di conversione
Questa tabella mostra i caratteri di conversione per formattare i dati numerici e di caratteri come testo.
| Tipo di valore | Conversione | Dettagli |
|---|---|---|
Intero, con segno |
| Base 10 |
Intero, senza segno |
| Base 10 |
| Base 8 (ottale) | |
| Base 16 (esadecimale), lettere minuscole | |
| Come | |
Numero in virgola mobile |
| Notazione in virgola fissa (utilizzare un operatore di precisione per specificare il numero di cifre dopo il punto decimale). |
| Notazione esponenziale, ad esempio | |
| Come | |
| Il più compatto tra | |
| Il più compatto tra | |
Caratteri o stringhe |
| Carattere singolo |
| Vettore di caratteri o array di stringhe. Il tipo di testo di output è uguale al tipo di |
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
, doven$nrappresenta 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,%xo%X, stampa il prefisso0,0xo0X.Per
%f,%eo%E, stampa il punto decimale anche quando la precisione è 0.Per
%go%G, non rimuove gli zeri finali o il punto decimale.
Esempio:
%#5.0fLarghezza 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 per10e cinque spazi allocati per100. 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,%eo%ENumero di cifre a destra del punto decimale
Esempio:'%.4f'stampapicome'3.1416'Per
%go%GNumero di cifre significative
Esempio:'%.4g'stampapicome'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', con9e6come larghezza del campo e precisione per l'output diexp(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
%bxo%bX
%bo
%buValore esadecimale, ottale o decimale a doppia precisione
Esempio:%bxstampapicome400921fb54442d18%txo%tX
%to
%tuValore esadecimale, ottale o decimale a precisione singola
Esempio:%txstampapicome40490fdb
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
\aBackspace
\bAvanzamento pagina
\fNuova riga
\nRitorno a capo
\rTabulazione orizzontale
\tTabulazione verticale
\vCarattere il cui valore numerico Unicode® può essere rappresentato dal numero esadecimale
N\xNEsempio:
restituiscefprintf('\x5A')'Z'Carattere il cui valore numerico Unicode può essere rappresentato dal numero ottale
N\NEsempio:
restituiscefprintf('\132')'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'convertepiin3.141593e+00.Se si applica una conversione di testo (
%co%s) a valori interi, MATLAB converte i valori che corrispondono a codici di carattere validi in caratteri.Esempio:
'%s'converte[65 66 67]inABC.
Array numerici o di caratteri, specificati come scalare, vettore, matrice o array multidimensionale.
Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Argomenti di output
Numero di byte che scrive fprintf, restituito come uno scalare. Quando si scrive su un file, nbytes è determinato dalla codifica dei caratteri. Quando si stampano i dati sullo schermo, nbytes è il numero di caratteri visualizzati sullo schermo.
Suggerimenti
Gli specificatori di formato per le funzioni di lettura
sscanfefscanfdifferiscono dai formati per le funzioni di scritturasprintfefprintf. 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,
fprintfstampa tutto il testo fino all'operatore o al carattere non valido e scarta il resto.Esempio: se
formatSpecè'value = %z',fprintfstampa'value ='in quanto%znon è un operatore di formattazione.Esempio: se
formatSpecè'character \x99999 = %s',fprintfstampa'character'in quanto\x99999non è 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
Note su utilizzo e limitazioni:
Il parametro
formatSpecdeve essere costante.In
formatSpec, i numeri esadecimali devono essere compresi nell'intervallo [0 7F] e i numeri ottali nell'intervallo [0 177].Se
fileIDha un valore costante di1o2e non è possibile effettuare chiamate estrinseche, il generatore di codice produce una chiamata C aprintf. Non è possibile effettuare chiamate estrinseche quando le stesse sono disabilitate o quandofprintfviene chiamata all'interno di unparforloop.Il comportamento di
fprintfnel codice generato corrisponde al comportamento del compilatore C anziché al comportamento di MATLAB in questi casi:Lo specificatore di formato ha uno specificatore di formato C corrispondente, ad esempio
%eo%E.La chiamata
fprintfsi trova all'interno di unparforloop.Le chiamate estrinseche sono disabilitate.
Queste opzioni e funzionalità non sono supportate:
L'identificatore di posizione
n$per il riordino dei valori di inputLa stampa di array
L'utilizzo dei sottotipi per stampare un numero in virgola mobile come valore ottale, decimale o esadecimale
Quando si chiama
fprintfcon lo specificatore di formato%s, non è possibile inserire un carattere nullo al centro del vettore di caratteri di input. Per scrivere un carattere nullo, utilizzarefprintf(fid, '%c', char(0)).I tipi di argomenti di input devono corrispondere ai loro tipi di formato. Ad esempio, se
nè un double, la generazione di codice non consente il seguente codice:str = fprintf('%d',n)Per la generazione di codice, convertire prima
nin un tipo intero con segno, comeint8.str = fprintf('%d',int8(n))Quando si chiama
fprintfcon uno specificatore di formato intero, il tipo dell'argomento intero deve essere un tipo che l'hardware target può rappresentare come un tipo C nativo. Ad esempio, se si chiamafprintf('%d', int64(n)), l'hardware target deve avere un tipo C nativo che supporti un intero a 64 bit.
Questa funzione supporta completamente gli ambienti basati su thread. Per maggiori informazioni, vedere Run MATLAB Functions in Thread-Based Environment.
La funzione fprintf supporta l'input di array GPU con queste note su utilizzo e limitazioni:
Questa funzione accetta gli array di GPU, ma non viene eseguita su una GPU.
Per maggiori informazioni, vedere Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Note su utilizzo e limitazioni:
Questa funzione opera su array distribuiti, ma viene eseguita nel client di MATLAB.
Per maggiori informazioni, vedere Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Cronologia versioni
Introduzione prima di R2006a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)