System.SysUtils.Format

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

function Format(const Format: string; const Args: array of const): string;
const AFormatSettings: TFormatSettings): string;

C++

extern DELPHI_PACKAGE System::UnicodeString __fastcall Format(const System::UnicodeString Format, const System::TVarRec *Args, const int Args_High)/* overload */;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils


Beschreibung

Gibt einen mit Hilfe eines Format-Strings und einem Argument-Array formatierten String zurück.

Die Funktion Format formatiert die Argumente in einem offenen (untypisierten) Array.

Format ist der Format-String. Weitere Informationen zu den verschiedenen Formatierungsmöglichkeiten finden Sie unterFormat-Strings in diesem Thema.

Args ist ein Array mit Argumenten, die für die Formatbezeichner in Format angewendet werden. In C++ gibt Args_High den Index des letzten Elements von Args an (eins weniger als die Anzahl der Elemente).

Format gibt die Ergebnisse der Anwendung der Argumente in Args für den Format-String Format zurück.

Für Format stehen zwei Syntaxformen zur Verfügung. Die erste Form von Format ist nicht Thread-sicher, da landesspezifische Informationen aus globalen Variablen verwendet werden. Der Thread-sicheren zweiten Form von Format werden landesspezifische Informationen im Parameter AFormatSettings übergeben. Vor dem Aufruf dieser Form von Format müssen Sie den Parameter AFormatSettings mit landesspezifischen Informationen füllen. Landesspezifische Standardinformationen können mit AFormatSettings zugewiesen werden.

Format-Strings

Mit Format-Strings werden Formate für allgemeine Formatierungsroutinen angegeben. Format-Strings, die an die String-Formatierungsroutinen übergeben werden, können zwei Arten von Objekten enthalten: literale Zeichen und Formatbezeichner. Literale Zeichen werden Wort für Wort in den resultierenden String kopiert. Formatbezeichner rufen Argumente aus der Argumentliste ab und weisen ihnen das Format zu.

Formatbezeichner werden in der folgenden Form angegeben:

"%" [index ":"] ["-"] [width] ["." prec] type

Jeder Formatbezeichner beginnt mit dem Zeichen %. Auf das Prozentzeichen folgen die folgenden Elemente (in der aufgeführten Reihenfolge):

  1. Ein optionaler Argumentindex-Bezeichner mit dem Offset Null (erstes Element hat den Index 0): [Index ":"].
  2. Eine optionale Angabe für die linksbündige Ausrichtung: ["-"].
  3. Eine optionale Breitenangabe: [width].
  4. Eine optionale Genauigkeitsangabe: ["." prec].
  5. Das Zeichen für den Konvertierungstyp: type.

In der folgenden Tabelle sind die möglichen Werte aufgeführt:

Wert Bedeutung

d

Dezimal. Das Argument muss ein Integerwert sein. Der Wert wird in einen String umgewandelt, der aus Dezimalziffern besteht. Wenn der Format-String einen Bezeichner für die Genauigkeit enthält, muss der resultierende String mindestens die angegebene Anzahl von Stellen aufweisen. Enthält er weniger Stellen, wird der String auf der linken Seite mit Nullen aufgefüllt.

u

Vorzeichenlose Dezimalzahl. Ähnlich zu d, allerdings enthält der resultierende String kein Vorzeichen.

e

Wissenschaftliche Notation. Das Argument muss ein Gleitkommawert sein. Der Wert wird in einen String der folgenden Form umgewandelt: "-d,ddd...E+ddd". Wenn es sich um eine negative Zahl handelt, beginnt der String mit einem Minuszeichen. Vor dem Dezimalkomma steht immer eine Ziffer. Die Gesamtanzahl der Stellen im resultierenden String (einschließlich der Ziffer vor dem Dezimalkomma) wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von 15 Stellen angenommen. Auf den Exponenten "E" im String folgen immer ein Plus- oder Minuszeichen und mindestens drei Stellen.

f

Fest. Das Argument muss ein Gleitkommawert sein. Der Wert wird in einen String der folgenden Form umgewandelt: "-ddd,ddd...". Wenn es sich um eine negative Zahl handelt, beginnt der String mit einem Minuszeichen. Die Anzahl der Stellen nach dem Dezimalkomma wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von zwei Dezimalstellen verwendet.

g

Allgemein. Das Argument muss ein Gleitkommawert sein. Der Wert wird unter Verwendung des Formats "Fest" oder "Wissenschaftliche Notation" in den kürzest möglichen Dezimal-String umgewandelt. Die Anzahl der signifikanten Stellen im resultierenden String wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von 15 Stellen angenommen. Nachfolgende Nullen werden aus dem resultierenden String entfernt. Ein Dezimalkomma wird nur bei Bedarf angezeigt. Für den resultierenden String wird das Festkommaformat verwendet, wenn die Anzahl der Stellen vor dem Dezimalzeichen kleiner oder gleich der festgelegten Genauigkeit und der Wert größer oder gleich 0,00001 ist. In allen anderen Fällen wird die wissenschaftliche Notation verwendet.

n

Zahl. Das Argument muss ein Gleitkommawert sein. Der Wert wird in einen String der folgenden Form umgewandelt: "-d.ddd.ddd,ddd...". Das Format n entspricht dem Format f, allerdings enthält der resultierende String Tausendertrennzeichen.

m

Zahl. Das Argument muss ein Gleitkommawert sein. Der Wert wird in einen String der folgenden Form umgewandelt: "-d.ddd.ddd,ddd...". Das Format n entspricht dem Format f, allerdings enthält der resultierende String Tausendertrennzeichen. CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator und CurrencyDecimals oder deren Entsprechungen in einer TFormatSettings-Datenstruktur. Enthält der Format-String einen Genauigkeitsbezeichner, setzt dieser den Wert in der globalen Variablen CurrencyDecimals global variable or its TFormatSettings equivalent.

p

Zeiger. Das Argument muss ein Zeigerwert sein. Der Wert wird in einen String mit acht Zeichen, der den hexadezimalen Wert des Zeigers darstellt, konvertiert (in x64 wird der Wert stattdessen in einen 16-Zeichen-String konvertiert).

s

String. Das Argument muss ein Zeichen, ein String oder ein PChar-Wert sein. Der String bzw. das Zeichen wird anstelle des Formatbezeichners eingefügt. Wenn im Format-String ein Genauigkeitsbezeichner angegeben ist, bestimmt er die maximale Länge des resultierenden Strings. Ist das Argument ein String, der diese Maximallänge überschreitet, wird der String abgeschnitten.

x

Hexadezimal. Das Argument muss ein Integerwert sein. Der Wert wird in einen String umgewandelt, der aus hexadezimalen Ziffern besteht. Wenn der Format-String einen Bezeichner für die Genauigkeit enthält, muss der resultierende String mindestens die angegebene Anzahl von Stellen aufweisen. Enthält er weniger Stellen, wird der String auf der linken Seite mit Nullen aufgefüllt.

Konvertierungszeichen können beliebig in Klein- oder Großschreibung angegeben werden.

Um das Zeichen % anzuzeigen (nicht, um einen Formatbezeichner zu beginnen), geben Sie %% ein. Beispiel:

Writeln(Format('%d%%', [100])); // displays '100%'

Bei allen Gleitkommaformaten wird das Zeichen für das Dezimal- bzw. das Tausendertrennzeichen aus den globalen Variablen DecimalSeparator und ThousandSeparator bzw. deren TFormatSettings-Entsprechungen ausgelesen.

Die Bezeichner für Index, Breite und Genauigkeit können direkt durch Angabe eines Strings mit Dezimalziffern (z.B. "%10d") oder indirekt mit Hilfe von Sternchen (z.B. "%*.*f") angegeben werden. Bei einem Sternchen wird das nächste Argument in der Argumentliste der zu verwendende Wert. Beachten Sie bitte, dass die Breite ein Integerwert und die Genauigkeit ein vorzeichenloser Integerwert ist. Zum Beispiel ist:

Format ('%*.*f', [8, 2, 123.456]);

gleichbedeutend mit:

Format ('%8.2f', [123.456]);

In C++ ist:

TVarRec args[3] = {8,2,123.456};
Format ("%*.*f", args, 2);

gleichbedeutend mit:

TVarRec args[1] = {123.456};
Format ("%8.2f", args, 0);

Der Breitenbezeichner legt die minimale Länge des Feldes für die Konvertierung fest. Ist der resultierende String kürzer als die minimale Feldlänge, wird er mit Leerzeichen aufgefüllt. Per Vorgabe werden die Leerzeichen vor dem Wert eingefügt, um eine rechtsbündige Ausrichtung zu erreichen. Enthält der Formatbezeichner jedoch einen Indikator für linksbündige Ausrichtung (vor dem Breitenbezeichner steht in diesem Fall ein Minuszeichen), werden die Leerzeichen nach dem Wert eingefügt und dieser linksbündig ausgerichtet.

Ein Indexbezeichner setzt den aktuellen Index der Argumentliste auf den angegebenen Wert. Der Index des ersten Arguments in der Liste hat den Wert 0. Durch die Verwendung von Indexbezeichnern kann dasselbe Argument mehrfach formatiert werden. Zum Beispiel: "Format('%d %d %0:d %1:d', [10, 20])" ergibt den String '10 20 10 20'.

Hinweis: Der Indexbezeichner wirkt sich auf die nachfolgende Formatierung aus. Format('%d %d %d %0:d %d', [1, 2, 3, 4]) gibt also '1 2 3 1 2' zurück, nicht '1 2 3 1 4'. Für das letztere Ergebnis müssen Sie Format('%d %d %d %0:d %3:d', [1, 2, 3, 4]).

angeben.

Variadisches Format

Die Clang-Compiler unterstützen jetzt die variadische Version von Format() und lassen sowohl ARRAYOFCONST als auch die variadische Syntax zu.

Klassische und Clang-Compiler:

Format ("Hello int=%d float=%f, str=%s", 
ARRAYOFCONST((10, 2.3L, String("str"))));

Clang-Compiler:

Format ("Hello int=%d float=%f, str=%s", 
10, 2.3L, String("str"));
Hinweis: Der klassische Compiler unterstützt nur ARRAYOFCONST, der Clang-Compiler unterstützt beides.

Beachten Sie, dass Format eine Indizierung in die Parameter ermöglicht, sodass ein Format-String auf Parameter in einer anderen Reihenfolge als übergeben zugreifen oder auf einen Parameter mehrfach zugreifen kann.

Klassische und Clang-Compiler:

Format ("%1:d %1:u %2:u", ARRAYOFCONST((myint, myuint)));

Clang-Compiler:

Format ("%1:d %1:u %2:u", myint, myuint);
Hinweis: Bei der Verwendung des Clang-basierten Compilers unterstützt TVarRec derzeit nicht Double oder Float auf 32-Bit-Plattformen. Daher müssen Gleitkommaparameter umgewandelt oder in ein Long Double konvertiert werden.

Siehe auch

Codebeispiele