Hauptinhalt

fprintf

Schreiben von Daten in eine Textdatei

Beschreibung

fprintf(fileID,formatSpec,A1,...,An) wendet 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.

Beispiel

fprintf(formatSpec,A1,...,An) formatiert Daten und zeigt die Ergebnisse auf dem Bildschirm an.

Beispiel

nbytes = fprintf(___) gibt mithilfe eines der Eingabeargumente in den vorangegangenen Syntaxen die Anzahl der Bytes zurück, die fprintf schreibt.

Beispiel

Beispiele

alle reduzieren

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.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

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

alle reduzieren

Dateikennung, angegeben als eine der folgenden Optionen:

  • Eine durch fopen erzeugte Dateikennung. fprintf unterstützt nicht das Schreiben in Internet-URLs.

  • 1 für die Standardausgabe (den Bildschirm).

  • 2 fü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).

Schematic of formatting operator characters.

Konvertierungszeichen

Diese Tabelle zeigt Konvertierungszeichen zur Formatierung von numerischen Daten und Zeichendaten als Text.

WerttypKonvertierungDetails

Ganzzahl, vorzeichenbehaftet

%d oder %i

Basis 10

Ganzzahl, vorzeichenlos

%u

Basis 10

%o

Basis 8 (oktal)

%x

Basis 16 (hexadezimal), Kleinbuchstaben af

%X

Identisch zu %x, Großbuchstaben AF

Gleitkommazahl

%f

Festkommaschreibweise (Verwenden Sie einen Präzisionsoperator, um die Anzahl der Nachkommastellen anzugeben.)

%e

Exponentialschreibweise, z. B. 3.141593e+00 (Verwenden Sie einen Präzisionsoperator, um die Anzahl der Nachkommastellen anzugeben.)

%E

Identisch zu %e, aber in Großbuchstaben, z. B. 3.141593E+00 (Verwenden Sie einen Präzisionsoperator, um die Anzahl der Nachkommastellen anzugeben.)

%g

%e oder %f, je nachdem, welche der beiden Optionen kompakter ist, ohne nachgestellte Nullstellen (Verwenden Sie einen Präzisionsoperator, um die Anzahl der signifikanten Stellen anzugeben.)

%G

%E oder %f, je nachdem, welche der beiden Optionen kompakter ist, ohne nachgestellte Nullstellen (Verwenden Sie einen Präzisionsoperator, um die Anzahl der signifikanten Stellen anzugeben.)

Zeichen oder Zeichenfolgen

%c

Einzelnes Zeichen

%s

Zeichenvektor oder String Array. Der Ausgabetext weist denselben Typ wie formatSpec auf.

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 n$, wobei n fü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, %x bzw. %X den Präfix 0, 0x bzw. 0X drucken.

    • Für %f, %e bzw. %E den Dezimalpunkt drucken, auch wenn die Genauigkeit 0 ist.

    • Für %g oder %G keine nachgestellten Nullstellen oder das Dezimalkomma entfernen.

    Beispiel: %#5.0f

  • Feldbreite

    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ür 10 und fünf Zeichen für 100 vorgesehen 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, %e oder %E

    Anzahl der Ziffern rechts vom Dezimalkomma
    Beispiel: '%.4f' gibt pi als '3.1416' aus

    Für %g oder %G

    Anzahl der signifikanten Stellen
    Beispiel: '%.4g' gibt pi als '3.142' aus

    Der 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, wobei 9 und 6 die Feldbreite und Präzision für die Ausgabe von exp(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

    %bx oder %bX
    %bo
    %bu

    Hexadezimaler, oktaler oder dezimaler Wert mit doppelter Präzision
    Beispiel: %bx gibt pi als 400921fb54442d18 aus

    %tx oder %tX
    %to
    %tu

    Hexadezimaler, oktaler oder dezimaler Wert mit einfacher Präzision
    Beispiel: %tx gibt pi als 40490fdb aus

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 formatSpec darstellen können.

    Sonderzeichen

    Darstellung

    Einfaches Anführungszeichen (Hochkomma)

    ''

    Prozentzeichen

    %%

    Backslash

    \\

    Alarm

    \a

    Rückschritt

    \b

    Seitenvorschub

    \f

    Zeilenvorschub (neue Zeile)

    \n

    Wagenrücklauf

    \r

    Horizontaltabulator

    \t

    Vertikaltabulator

    \v

    Zeichen, dessen numerischer Unicode®-Wert durch eine hexadezimale Zahl N dargestellt werden kann

    \xN

    Beispiel: fprintf('\x5A') gibt 'Z' zurück

    Zeichen, dessen numerischer Unicode-Wert durch eine oktale Zahl N dargestellt werden kann

    \N

    Beispiel: fprintf('\132') gibt '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' konvertiert pi in 3.141593e+00.

  • Wenn Sie eine Textkonvertierung (entweder %c oder %s) auf ganzzahlige Werte anwenden, konvertiert MATLAB Werte, die gültigen Zeichencodes entsprechen, in Zeichen.

    Beispiel: '%s' konvertiert [65 66 67] in ABC.

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

alle reduzieren

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 sscanf und fscanf unterscheiden sich von den Formaten für die Schreibfunktionen sprintf und fprintf. 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 fprintf den gesamten Text bis zum ungültigen Operator oder Zeichen aus und verwirft den Rest.

    Beispiel: Wenn formatSpec 'value = %z' ist, gibt fprintf 'value =' aus, da %z kein Formatierungsoperator ist.

    Beispiel: Wenn formatSpec 'character \x99999 = %s' ist, gibt fprintf 'character' aus, da \x99999 kein 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

alle erweitern

Versionsverlauf

Eingeführt vor R2006a