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
Stampa di testo letterale e valori di array
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.
Stampa di valori a doppia precisione come numeri interi
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.
Scrittura di dati tabellari in un file di testo
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.txt
x 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
Acquisizione del numero di byte scritti sul file
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
Visualizzazione dei collegamenti ipertestuali nella finestra di comando
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
fileID
— Identificatore di file
1
(predefinito) | 2
| scalare
Identificatore di file, specificato in uno dei seguenti modi:
Un identificatore di file ottenuto da
fopen
.fprintf
non supporta la scrittura su URL di Internet.1
per l'output standard (lo schermo).2
per l'errore standard.
Tipi di dati: double
formatSpec
— Formato dei campi di output
operatori di formattazione
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
$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 prefisso0
,0x
o0X
.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 per10
e 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
,%e
o%E
Numero di cifre a destra del punto decimale
Esempio:'%.4f'
stampapi
come'3.1416'
Per
%g
o%G
Numero di cifre significative
Esempio:'%.4g'
stampapi
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'
, con9
e6
come 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
%bx
o%bX
%bo
%bu
Valore esadecimale, ottale o decimale a doppia precisione
Esempio:%bx
stampapi
come400921fb54442d18
%tx
o%tX
%to
%tu
Valore esadecimale, ottale o decimale a precisione singola
Esempio:%tx
stampapi
come40490fdb
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:
restituiscefprintf
('\x5A')'Z'
Carattere il cui valore numerico Unicode può essere rappresentato dal numero ottale
N
\N
Esempio:
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'
convertepi
in3.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]
inABC
.
A1,...,An
— Array numerici o di caratteri
scalare | vettore | matrice | array multidimensionale
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
nbytes
— Numero di byte
scalare
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
sscanf
efscanf
differiscono dai formati per le funzioni di scritturasprintf
efprintf
. 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,
fprintf
stampa tutto il testo fino all'operatore o al carattere non valido e scarta il resto.Esempio: se
formatSpec
è'value = %z'
,fprintf
stampa'value ='
in quanto%z
non è un operatore di formattazione.Esempio: se
formatSpec
è'character \x99999 = %s'
,fprintf
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
Generazione di codice C/C++
Genera codice C e C++ con MATLAB® Coder™.
Note su utilizzo e limitazioni:
Il parametro
formatSpec
deve essere costante.In
formatSpec
, i numeri esadecimali devono essere compresi nell'intervallo [0 7F] e i numeri ottali nell'intervallo [0 177].Se
fileID
ha un valore costante di1
o2
e 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 quandofprintf
viene chiamata all'interno di unparfor
loop.Il comportamento di
fprintf
nel 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
%e
o%E
.La chiamata
fprintf
si trova all'interno di unparfor
loop.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
fprintf
con 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 = sprintf('%d',n)
Per la generazione di codice, convertire prima
n
in un tipo intero con segno, comeint8
.str = sprintf('%d',int8(n))
Quando si chiama
fprintf
con 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.
Ambiente basato su thread
Esegui il codice in background usando MATLAB® backgroundPool
oppure accelera il codice con Parallel Computing Toolbox™ ThreadPool
.
Questa funzione supporta completamente gli ambienti basati su thread. Per maggiori informazioni, vedere Run MATLAB Functions in Thread-Based Environment.
Array GPU
Accelera il codice mediante esecuzione su un’unità di elaborazione grafica (GPU) con Parallel Computing Toolbox™.
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).
Array distribuiti
Partiziona array di grandi dimensioni nella memoria combinata del cluster con 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: United States.
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)
Asia-Pacifico
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)