Hauptinhalt

sprintf

R2026b

Formatieren von Daten in eine Zeichenfolge oder einen Zeichenvektor

Beschreibung

str = sprintf(formatSpec,A1,...,An) formatiert die Daten mithilfe der von formatSpec angegebenen Formatierungsoperatoren in den Arrays A1,...,An und gibt den entstehenden Text in str zurück. Die sprintf-Funktion formatiert die Werte in A1,...,An in der Reihenfolge der Spalten. Wenn formatSpec eine Zeichenfolge ist, gilt dies auch für die Ausgabe str. Anderenfalls ist str ein Zeichenvektor.

Wenn Sie mehrere Stücke formatierten Texts als String Array oder Zellenarray aus Zeichenvektoren zurückgeben möchten, verwenden Sie die compose-Funktion.

Beispiel

[str,errmsg] = sprintf(formatSpec,A1,...,An) gibt eine Fehlermeldung in Form eines Zeichenvektors zurück, wenn der Vorgang fehlschlägt. Andernfalls ist errmsg leer.

str = sprintf(literalText) setzt Escapezeichensequenzen in literalText um, z. B. \n und \t. Alle anderen Zeichen werden unverändert zurückgegeben. Wenn literalText einen Formatierungsoperator enthält (z. B. %f), wird dieser und alle darauffolgenden Zeichen von str verworfen.

Beispiele

alle reduzieren

Formatieren Sie eine Gleitkommazahl mithilfe der Bezeichner %e, %f und %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'

Kombinieren Sie Literaltext mit Array-Werten zu einem Zeichenvektor.

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

Wenn Sie formatierten Text als Zeichenfolge zurückgeben möchten, geben Sie formatSpec beim Aufrufen der sprintf-Funktion nicht als Zeichenvektor, sondern als Zeichenfolge an.

Konvertieren Sie die Daten und geben Sie das Ergebnis als Zeichenfolge zurück.

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

Konvertieren Sie die Eingabe-Zeichenfolge. Eingabe-Arrays, die Text enthalten, können entweder Zeichenvektoren oder Zeichenfolgen sein.

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

Konvertieren Sie explizit Werte mit doppelter Präzision in Ganzzahlen.

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

Geben Sie die Mindestbreite des gedruckten Werts an.

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

Die 0-Flag im Formatbezeichner %025d erfordert führende Nullstellen in der Ausgabe.

Ordnen Sie die Eingabewerte mithilfe des Positionsbezeichners n$ neu an.

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'

Die Syntax C{:} erstellt eine durch Kommas getrennte Liste von Arrays, die die Inhalte jeder Zelle von C in der Reihenfolge der Spalten enthalten. Beispiel: C{1}==1 und C{2}=='AA'.

Eingabeargumente

alle reduzieren

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

WerttypKonvertierungDetails

Ganzzahl, vorzeichenbehaftet

%d oder %i

Basis 10

Ganzzahl, vorzeichenlos

%u

Basis 10

%o

Basis 8 (oktal)

%x

Basis 16 (hexadezimal), Kleinbuchstaben a–f

%X

Identisch zu %x, Großbuchstaben A–F

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 die Hexadezimalzahl N dargestellt werden kann

    \xN

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

    Zeichen, dessen numerischer Unicode-Wert durch die Oktalzahl N dargestellt werden kann

    \N

    Beispiel: sprintf('\132') gibt 'Z' zurück

    ANSI-Escapesequenzen S zur Angabe von Textstil und Textfarbe. Trennen Sie mehrere Codes mithilfe von Semikola und löschen Sie die Stilvorgabe mit dem Code 0.

    \x1b[Sm

    Beispiel: sprintf("\x1b[1;34mBold blue text\x1b[0m") gibt Bold blue text zurück und löscht anschließend den Stil. Die ANSI-Escapesequenz 1 stellt Text in Fettdruck und 34 blauen Text dar.

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, Zeichen- oder String Arrays.

Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Eingabetext ohne Formatierungsoperatoren, angegeben als Zeichenvektor oder Zeichenfolgenskalar. sprintf setzt beliebige Escapezeichensequenzen in literalText um.

Datentypen: char | string

Ausgabeargumente

alle reduzieren

Formatierter Text, zurückgegeben als Zeichenvektor oder Zeichenfolgenskalar. Der Typ der Ausgabe entspricht dem Typ von formatSpec.

Fehlermeldung, bei fehlgeschlagenem Vorgang zurückgegeben als Zeichenvektor. Andernfalls ist errmsg leer.

Tipps

  • Die sprintf-Funktion ähnelt fprintf, mit der Ausnahme, dass fprintf in eine Datei oder in das Befehlsfenster druckt.

  • 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 sprintf den gesamten Text bis zum ungültigen Operator oder Zeichen aus und verwirft den Rest.

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

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

alle erweitern