fprintf
Schreiben von Daten in eine Textdatei
Beschreibung
fprintf( wendet fileID,formatSpec,A1,...,An)formatSpec auf alle Elemente der Arrays A1,...An spaltenweise an und schreibt die Daten in eine Textdatei. fprintf verwendet das Kodierungsschema, das in dem Aufruf von fopen angegeben ist.
fprintf( formatiert Daten und zeigt die Ergebnisse auf dem Bildschirm an.formatSpec,A1,...,An)
Beispiele
Geben Sie mehrere numerische Werte und Literaltext auf dem Bildschirm aus.
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 in der formatSpec-Eingabe gibt an, dass der erste Wert in jeder Ausgabezeile eine Gleitkommazahl mit einer Feldbreite von vier Stellen ist, einschließlich zwei Nachkommastellen. %8.3f in der formatSpec-Eingabe gibt an, dass der zweite Wert in jeder Ausgabezeile eine Gleitkommazahl mit einer Feldbreite von acht Stellen ist, einschließlich drei Nachkommastellen. \n ist ein Steuerzeichen, das eine neue Zeile beginnt.
Konvertieren Sie explizit Werte mit doppelter Präzision mit Brüchen in ganzzahlige Werte.
a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));1 3 5
%d in der formatSpec-Eingabe gibt jeden Wert des Vektors round(a) als vorzeichenbehaftete Ganzzahl aus. \n ist ein Steuerzeichen, das eine neue Zeile beginnt.
Schreiben Sie eine kurze Tabelle der Exponentialfunktion in eine Textdatei namens 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);
Der erste Aufruf von fprintf gibt den Kopfzeilentext x und exp(x) aus, und der zweite Aufruf gibt die Werte der Variablen A aus.
Wenn Sie die Datei mit Microsoft® Notepad lesen möchten, verwenden Sie '\r\n' anstelle von '\n', um in eine neue Zeile zu wechseln. Ersetzen Sie zum Beispiel die Aufrufe von fprintf durch Folgendes:
fprintf(fileID,'%6s %12s\r\n','x','exp(x)'); fprintf(fileID,'%6.2f %12.8f\r\n',A);
Die MATLAB®-Importfunktionen, alle UNIX®-Anwendungen und Microsoft Word und WordPad erkennen '\n' als Indikator für einen Zeilenumbruch.
Zeigen Sie den Inhalt der Datei mithilfe des Befehls type an.
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
Schreiben Sie Daten in eine Datei und geben Sie die Anzahl der geschriebenen Bytes zurück.
Schreiben Sie ein Array mit Daten, A, in eine Datei und fragen Sie die Anzahl der Bytes ab, die fprintf schreibt.
A = magic(4); fileID = fopen('myfile.txt','w'); nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96
Die Funktion fprintf schrieb 96 Bytes in die Datei.
Schließen Sie die Datei.
fclose(fileID);
Zeigen Sie den Inhalt der Datei mithilfe des Befehls type an.
type('myfile.txt') 16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
Zeigen Sie einen Hyperlink(MathWorks Website) auf dem Bildschirm an.
url = 'https://www.mathworks.com'; sitename = 'The MathWorks Web Site'; fprintf('<a href = "%s">%s</a>\n',url,sitename)
%s in der formatSpec-Eingabe zeigt an, dass die Werte der Variablen url und sitename als Text ausgegeben werden sollen.
Eingabeargumente
Dateikennung, angegeben als eine der folgenden Optionen:
Eine durch
fopenerzeugte Dateikennung.fprintfunterstützt nicht das Schreiben in Internet-URLs.1für die Standardausgabe (den Bildschirm).2für den Standardfehler.
Datentypen: double
Format der Ausgabefelder, festgelegt mithilfe von Formatierungsoperatoren. formatSpec kann auch normalen Text und Sonderzeichen enthalten.
Wenn formatSpec Literaltext enthält, der Escape-Zeichen wie \n darstellt, wandelt fprintf die Escape-Zeichen um.
formatSpec kann ein in einfachen Anführungszeichen eingeschlossener Zeichenvektor oder ein Zeichenfolgenskalar sein.
Formatierungsoperator
Formatierungsoperatoren beginnen mit einem Prozentzeichen, %, und enden mit einem Konvertierungszeichen. Das Konvertierungszeichen ist erforderlich. Optional können Sie Operatoren für Kennungen, Flags, Feldbreite, Genauigkeit und Untertyp zwischen % und dem Konvertierungszeichen angeben. (Leerzeichen zwischen den Operatoren sind ungültig und werden hier nur zur besseren Lesbarkeit angezeigt).

Konvertierungszeichen
Diese Tabelle zeigt Konvertierungszeichen zur Formatierung von numerischen Daten und Zeichendaten als Text.
| Werttyp | Konvertierung | Details |
|---|---|---|
Ganzzahl, vorzeichenbehaftet |
| Basis 10 |
Ganzzahl, vorzeichenlos |
| Basis 10 |
| Basis 8 (oktal) | |
| Basis 16 (hexadezimal), Kleinbuchstaben | |
| Identisch zu | |
Gleitkommazahl |
| Festkommaschreibweise (Verwenden Sie einen Präzisionsoperator, um die Anzahl der Nachkommastellen anzugeben.) |
| Exponentialschreibweise, z. B. | |
| Identisch zu | |
|
| |
|
| |
Zeichen oder Zeichenfolgen |
| Einzelnes Zeichen |
| Zeichenvektor oder String Array. Der Ausgabetext weist denselben Typ wie |
Optionale Operatoren
Die optionalen Operatoren für Kennungen, Flags, Feldbreite, Genauigkeit und Untertyp definieren das Format des Ausgabetextes weiter.
Kennung
Reihenfolge für die Verarbeitung der Eingabeargumente der Funktion. Verwenden Sie die Syntax
, wobein$nfür die Positionen der anderen Eingabeargumente im Funktionsaufruf steht.Beispiel:
('%3$s %2$s %1$s %2$s','A','B','C')gibt die Eingabeargumente'A','B'und'C'wie folgt aus:C B A B.Hinweis: Wenn es sich bei einem Eingabeargument um ein Array handelt, können Sie bestimmte Array-Elemente aus diesem Eingabeargument nicht mithilfe von Kennungen angeben.
Flags
'–'Linksbündig.
Beispiel:%-5.2f
Beispiel:%-10s'+'Immer ein Vorzeichen (+ oder -) für jeden numerischen Wert drucken.
Beispiel:%+5.2f
Text rechtsbündig ausrichten.
Beispiel:%+10s' 'Ein Leerzeichen vor dem Wert einfügen.
Beispiel:% 5.2f'0'Auf die Feldbreite mit führenden Nullstellen auffüllen.
Beispiel:%05.2f'#'Ausgewählte numerische Konvertierungen ändern:
Für
%o,%xbzw.%Xden Präfix0,0xbzw.0Xdrucken.Für
%f,%ebzw.%Eden Dezimalpunkt drucken, auch wenn die Genauigkeit 0 ist.Für
%goder%Gkeine nachgestellten Nullstellen oder das Dezimalkomma entfernen.
Beispiel:
%#5.0fFeldbreite
Mindestanzahl der zu druckenden Zeichen. Der Feldbreitenoperator kann eine Zahl sein oder ein Sternchen (
*) sein, um auf ein Eingabeargument zu verweisen.Wenn Sie
*als Feldbreitenoperator angeben, müssen die anderen Eingabeargumente sowohl eine Breite als auch einen zu druckenden Wert enthalten. Die Breiten und Werte können Paare von Argumenten oder Paare innerhalb eines numerischen Arrays sein. Mit*als Feldbreitenoperator können Sie verschiedene Werte mit unterschiedlichen Breiten drucken.Beispiel: Die Eingabeargumente
('%12d',intmax)sind äquivalent zu('%*d',12,intmax).Beispiel: Die Eingabeargumente
('%*d',[2 10 5 100])geben'10 100'zurück, wobei zwei Zeichen für10und fünf Zeichen für100vorgesehen sind. Alternativ können Sie die Feldbreiten und Werte auch in Form von mehreren Argumenten angeben, z. B.('%*d',2,10,5,100).Die Funktion füllt die Feldbreite mit Leerzeichen vor dem Wert auf, sofern nicht durch Flags anders angegeben.
Präzision
Für
%f,%eoder%EAnzahl der Ziffern rechts vom Dezimalkomma
Beispiel:'%.4f'gibtpials'3.1416'ausFür
%goder%GAnzahl der signifikanten Stellen
Beispiel:'%.4g'gibtpials'3.142'ausDer Präzisionsoperator kann eine Zahl oder ein Sternchen (
*) sein, um auf ein Argument zu verweisen.Wenn Sie
*als Feldpräzisionsoperator angeben, müssen die anderen Eingabeargumente sowohl eine Präzision als auch einen zu druckenden Wert enthalten. Die Präzisionswerte und Werte können Paare von Argumenten oder Paare innerhalb eines numerischen Arrays sein. Mit*als Präzisionsoperator können Sie verschiedene Werte mit unterschiedlichen Präzisionswerten drucken.Wenn Sie
*.*als Feldbreiten- und Präzisionsoperatoren angeben, müssen Sie Feldbreiten, Präzisionswerte und Werte als Triplets angeben.Beispiel: Die Eingabeargumente
('%.4f',pi)sind äquivalent zu('%.*f',4,pi).Beispiel: Die Eingabeargumente
('%6.4f',pi)sind äquivalent zu('%*.*f',6,4,pi).Beispiel: Die Eingabeargumente
('%*.*f',6,4,pi,9,6,exp(1))geben'3.1416 2.718282'zurück, wobei9und6die Feldbreite und Präzision für die Ausgabe vonexp(1)darstellen.Hinweis
Wenn Sie einen Präzisionsoperator für Gleitkommawerte angeben, der die Genauigkeit des numerischen Eingabedatentyps überschreitet, stimmen die Ergebnisse möglicherweise nicht mit der von Ihnen angegebenen Präzision mit den Eingabewerten überein. Das Ergebnis hängt von Ihrer Computerhardware und Ihrem Betriebssystem ab.
Untertypen
Sie können einen Untertyp-Operator verwenden, um einen Gleitkommawert als oktalen, dezimalen oder hexadezimalen Wert auszugeben. Der Untertyp-Operator steht unmittelbar vor dem Konvertierungszeichen. Diese Tabelle zeigt die Konvertierungen, die Untertypen verwenden können.
Eingabewerttyp
Untertyp und Konvertierungszeichen
Ausgabewerttyp
Gleitkommazahl
%bxoder%bX
%bo
%buHexadezimaler, oktaler oder dezimaler Wert mit doppelter Präzision
Beispiel:%bxgibtpials400921fb54442d18aus%txoder%tX
%to
%tuHexadezimaler, oktaler oder dezimaler Wert mit einfacher Präzision
Beispiel:%txgibtpials40490fdbaus
Text vor oder nach Formatierungsoperatoren
formatSpec kann auch zusätzlichen Text vor einem Prozentzeichen % oder nach einem Konvertierungszeichen enthalten. Der Text kann sein:
Gewöhnlicher Text zum Drucken.
Bestimmte Sonderzeichen, die Sie nicht als gewöhnlichen Text eingeben können. Diese Tabelle zeigt, wie Sie Sonderzeichen in
formatSpecdarstellen können.Sonderzeichen
Darstellung
Einfaches Anführungszeichen (Hochkomma)
''Prozentzeichen
%%Backslash
\\Alarm
\aRückschritt
\bSeitenvorschub
\fZeilenvorschub (neue Zeile)
\nWagenrücklauf
\rHorizontaltabulator
\tVertikaltabulator
\vZeichen, dessen numerischer Unicode®-Wert durch eine hexadezimale Zahl
Ndargestellt werden kann\xNBeispiel:
gibtfprintf('\x5A')'Z'zurückZeichen, dessen numerischer Unicode-Wert durch eine oktale Zahl
Ndargestellt werden kann\NBeispiel:
gibtfprintf('\132')'Z'zurück
Bemerkenswertes Verhalten bei Konvertierungen mit Formatierungsoperatoren
Wenn Sie einen Wert angeben, der nicht in die Konvertierung passt, z. B. einen nicht-ganzzahligen numerischen Wert für eine Textkonvertierung, kann MATLAB die angegebene Konvertierung übersteuern.
Beispiel:
'%s'konvertiertpiin3.141593e+00.Wenn Sie eine Textkonvertierung (entweder
%coder%s) auf ganzzahlige Werte anwenden, konvertiert MATLAB Werte, die gültigen Zeichencodes entsprechen, in Zeichen.Beispiel:
'%s'konvertiert[65 66 67]inABC.
Numerische Arrays oder Character Arrays, angegeben als Skalar, Vektor, Matrix oder mehrdimensionales Array.
Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Ausgabeargumente
Anzahl der Bytes, die fprintf schreibt, zurückgegeben als Skalar. Beim Schreiben in eine Datei wird nbytes durch die Zeichenkodierung bestimmt. Beim Drucken von Daten auf dem Bildschirm gibt nbytes die Anzahl der Zeichen an, die auf dem Bildschirm angezeigt werden.
Tipps
Die Formatbezeichner für die Lesefunktionen
sscanfundfscanfunterscheiden sich von den Formaten für die Schreibfunktionensprintfundfprintf. Die Lesefunktionen unterstützen kein Präzisionsfeld. Das Breitenfeld gibt ein Minimum für das Schreiben, jedoch ein Maximum für das Lesen an.Wenn Sie ungültige Formatierungsoperatoren oder Sonderzeichen angeben, gibt
fprintfden gesamten Text bis zum ungültigen Operator oder Zeichen aus und verwirft den Rest.Beispiel: Wenn
formatSpec'value = %z'ist, gibtfprintf'value ='aus, da%zkein Formatierungsoperator ist.Beispiel: Wenn
formatSpec'character \x99999 = %s'ist, gibtfprintf'character'aus, da\x99999kein gültiges Sonderzeichen ist.
Referenzen
[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.
Erweiterte Fähigkeiten
Hinweise zur Verwendung und Einschränkungen:
Der
formatSpec-Parameter muss konstant sein.In
formatSpecmüssen hexadezimale Zahlen im Bereich [0 7F] und oktale Zahlen im Bereich [0 177] liegen.Wenn
fileIDeinen konstanten Wert von1oder2aufweist und extrinsische Aufrufe nicht möglich sind, erzeugt der Codegenerator einen C-printf-Aufruf. Extrinsische Aufrufe sind dann nicht möglich, wenn extrinsische Aufrufe deaktiviert sind oder wennfprintfinnerhalb einerparfor-Schleife aufgerufen wird.In diesen Fällen entspricht das Verhalten von
fprintfim generierten Code dem Verhalten des C-Compilers und nicht dem MATLAB-Verhalten:Der Formatbezeichner besitzt einen entsprechenden C-Formatbezeichner, zum Beispiel
%eoder%E.Der
fprintf-Aufruf befindet sich innerhalb einerparfor-Schleife.Extrinsische Aufrufe sind deaktiviert.
Diese Optionen und Funktionen werden nicht unterstützt:
Die Positionskennung
n$zum Umgruppieren der EingabewerteAusgeben von Arrays
Gleitkommazahl mithilfe von Untertypen als Oktal-, Dezimal- oder Hexadezimalwert ausgeben
Wenn Sie
fprintfmit dem Formatbezeichner%saufrufen, können Sie kein Nullzeichen in die Mitte des Eingabevektors setzen. Verwenden Siefprintf(fid, '%c', char(0)), um ein Nullzeichen zu schreiben.Die Typen der Eingabeargumente müssen mit ihren Formattypen übereinstimmen. Wenn beispielsweise
nein Double ist, lässt die Codegenerierung den folgenden Code nicht zu:str = fprintf('%d',n)Zur Codegenerierung müssen Sie zunächst
nin einen vorzeichenbehafteten Ganzzahltyp wieint8umwandeln.str = fprintf('%d',int8(n))Wenn Sie
fprintfmit einem Ganzzahl-Formatbezeichner aufrufen, muss der Typ des Ganzzahlarguments ein Typ sein, den die Zielhardware als nativen C-Typ darstellen kann. Wenn Sie beispielsweisefprintf('%d', int64(n))aufrufen, muss die Zielhardware über einen nativen C-Typ verfügen, der eine 64-Bit-Ganzzahl unterstützt.
Siehe die Verwendungshinweise und Einschränkungen im Abschnitt zur C/C++ Codegenerierung. Dieselben Verwendungshinweise und Einschränkungen gelten auch für die Grafikkarten-Codegenerierung.
Die Funktion fprintf bietet vollständige Unterstützung für Thread-basierte Umgebungen. Weitere Informationen finden Sie unter Run MATLAB Functions in Thread-Based Environment.
Die Funktion fprintf unterstützt GPU-Array-Eingaben mit folgenden Verwendungshinweisen und Einschränkungen:
Diese Funktion akzeptiert Grafikkarten-Arrays, wird jedoch nicht auf einer Grafikkarte ausgeführt.
Weitere Informationen finden Sie unter Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Die Funktion fprintf unterstützt verteilte Arrays mit folgenden Verwendungshinweisen und Einschränkungen:
Diese Funktion kann auf verteilte Arrays angewandt werden, wird jedoch im MATLAB-Client ausgeführt.
Weitere Informationen finden Sie unter Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Versionsverlauf
Eingeführt vor 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.
Website auswählen
Wählen Sie eine Website aus, um übersetzte Inhalte (sofern verfügbar) sowie lokale Veranstaltungen und Angebote anzuzeigen. Auf der Grundlage Ihres Standorts empfehlen wir Ihnen die folgende Auswahl: .
Sie können auch eine Website aus der folgenden Liste auswählen:
So erhalten Sie die bestmögliche Leistung auf der Website
Wählen Sie für die bestmögliche Website-Leistung die Website für China (auf Chinesisch oder Englisch). Andere landesspezifische Websites von MathWorks sind für Besuche von Ihrem Standort aus nicht optimiert.
Amerika
- 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)