sprintf
R2026bFormatieren von Daten in eine Zeichenfolge oder einen Zeichenvektor
Syntax
Beschreibung
formatiert die Daten mithilfe der von str = sprintf(formatSpec,A1,...,An)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.
[ gibt eine Fehlermeldung in Form eines Zeichenvektors zurück, wenn der Vorgang fehlschlägt. Andernfalls ist str,errmsg] = sprintf(formatSpec,A1,...,An)errmsg leer.
setzt Escapezeichensequenzen in str = sprintf(literalText)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
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
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.
| 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 die Hexadezimalzahl
Ndargestellt werden kann\xNBeispiel:
gibtsprintf('\x5A')'Z'zurückZeichen, dessen numerischer Unicode-Wert durch die Oktalzahl
Ndargestellt werden kann\NBeispiel:
gibtsprintf('\132')'Z'zurückANSI-Escapesequenzen
Szur Angabe von Textstil und Textfarbe. Trennen Sie mehrere Codes mithilfe von Semikola und löschen Sie die Stilvorgabe mit dem Code0.\x1b[SmBeispiel:
gibtsprintf("\x1b[1;34mBold blue text\x1b[0m")Bold blue textzurück und löscht anschließend den Stil. Die ANSI-Escapesequenz1stellt Text in Fettdruck und34blauen 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'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, 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
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 ähneltfprintf, mit der Ausnahme, dassfprintfin eine Datei oder in das Befehlsfenster druckt.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
sprintfden gesamten Text bis zum ungültigen Operator oder Zeichen aus und verwirft den Rest.Beispiel: Wenn
formatSpec'value = %z'ist, gibtsprintf'value ='aus, da%zkein Formatierungsoperator ist.Beispiel: Wenn
formatSpec'character \x99999 = %s'ist, gibtsprintf'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 die Eingabearrays konstant sind, wertet der Codegenerator den Aufruf von
sprintfin MATLAB zum Zeitpunkt der Codegenerierung aus. In diesem Fall gelten die Einschränkungen der Codegenerierung fürsprintfnicht undsprintfverhält sich im generierten Code genauso wie in MATLAB.Wenn extrinsische Aufrufe nicht möglich sind, erzeugt der Codegenerator einen C Code für
sprintf. Extrinsische Aufrufe sind dann nicht möglich, wenn extrinsische Aufrufe deaktiviert sind oder wennsprintfinnerhalb einerparfor-Schleife aufgerufen wird.In diesen Fällen entspricht das Verhalten von
sprintfim generierten Code dem Verhalten des C-Compilers und nicht dem MATLAB-Verhalten:Der Formatbezeichner besitzt einen entsprechenden C-Formatbezeichner, zum Beispiel
%eoder%E.Der
sprintf-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
sprintfmit dem Formatbezeichner%saufrufen, können Sie kein Nullzeichen in die Mitte des Eingabevektors setzen. Verwenden Siesprintf(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 = sprintf('%d',n)Zur Codegenerierung müssen Sie zunächst
nin einen vorzeichenbehafteten Ganzzahltyp wieint8umwandeln.str = sprintf('%d',int8(n))Wenn Sie
sprintfmit einem Ganzzahl-Formatbezeichner aufrufen, muss der Typ des Ganzzahlarguments ein Typ sein, den die Zielhardware als nativen C-Typ darstellen kann. Wenn Sie beispielsweisesprintf('%d', int64(n))aufrufen, muss die Zielhardware über einen nativen C-Typ verfügen, der eine 64-Bit-Ganzzahl unterstützt.Die dynamische Speicherzuordnung muss aktiviert sein.
Die Ausgabe von
sprintfim generierten C Code stimmt auf Zeichenebene möglicherweise nicht exakt mit der Ausgabe in MATLAB überein. Beispiel: MATLAB zeigtInfan und der C Code drucktinf.
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 sprintf bietet vollständige Unterstützung für Thread-basierte Umgebungen. Weitere Informationen finden Sie unter Run MATLAB Functions in Thread-Based Environment.
Die Funktion sprintf 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 sprintf 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 R2006aDie sprintf-Funktion unterstützt das Rendern von ANSI-Escapesequenzen zur Angabe von Textstil und Textfarbe im Befehlsfenster, darunter Fettdruck, Unterstreichung, Kursivdruck und Durchstreichung sowie Vorder- und Hintergrundfarben. Zur Darstellung von Textstil und Textfarbe geben Sie die Sonderzeichenfolge \x1b[Sm in formatSpec ein.
Beispielsweise gibt sprintf("\x1b[1;34mBold blue text\x1b[0m") Bold blue text zurück und löscht anschließend den Stil.
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)