System.SysUtils.Format

提供: Appmethod Libraries
移動先: 案内検索

Object Pascal

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

C++

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

プロパティ

種類 可視性 ソース ユニット
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils


説明

書式文字列と引数の配列から書式設定された文字列を組み立てて返します。

Format 関数は、オープンな(型なし)配列にある一連の引数の形式を設定します。

Format とは、書式文字列です。 書式文字列の詳細は、このトピックで説明する「書式文字列」を参照してください。

Args は、Format 内の書式指定子に適用する引数の配列です。 C++ の場合、Args_Size では、Args の最後の要素のインデックスを指定します(要素数より 1 少ない値)。

Format は、Args 内の引数を書式文字列 Format に適用した結果を返します。

Format には、構文形式が 2 つあります。 Format の第 1 の形式は、グローバル変数に含まれているローカライズ情報を使用するため、スレッド セーフではありません。 Format の第 2 の形式は、FormatSettings パラメータに含まれているローカライズ情報を参照し、スレッドに対応しています。 Format のスレッド セーフ形式を呼び出す前に、FormatSettings にローカライズ情報を入れる必要があります。 FormatSettings にデフォルトのローカル値セットを入れるには、GetLocaleFormatSettings を呼び出します。

書式文字列

書式文字列は、汎用の書式設定ルーチンに対し、必要な書式を指定します。 文字列の書式設定ルーチンに渡される書式文字列には、リテラル文字と書式指定子という 2 種類のオブジェクトが含まれます。 リテラル文字は、結果の文字列に逐一コピーされます。 書式指定子は、引数リストから引数を取得し、書式設定をそれぞれに適用します。

書式指定子の形式は次のとおりです。

"%" [インデックス ":"] ["-"] [幅] ["." 精度] 型

書式指定子は、% 文字で始まります。 パーセント記号(%)の後ろには、次の要素がこの順序で指定されます。

  1. 任意の引数、ゼロオフセット インデックス指定子(つまり、最初の項目のインデックスは 0)、[インデックス ":"]
  2. 任意、左寄せ指示、 ["-"]
  3. 任意、幅指定子、[幅]
  4. 任意、精度指定子、["." 精度]
  5. 変換型文字、

次の表に、型として指定可能な値を示します。

意味

d

10 進数です。 引数は整数値でなければなりません。 値は 10 進数の文字列に変換されます。 書式文字列に精度指定子が含まれている場合は、結果の文字列に少なくとも指定された桁数がなければならないことを示しています。値の桁数が指定より少ない場合は、結果の文字列の左側がゼロで埋められます。

u

符号なし 10 進数。 d と同様ですが、符号は出力されません。

e

科学表記。 引数は浮動小数点値でなければなりません。 値は "-d.ddd...E+ddd" という形式の文字列に変換されます。 負の数値の場合、結果の文字列はマイナス記号で始まります。 小数点の前は必ず 1 桁です。 結果の文字列の総桁数(小数点の前の 1 桁も含む)は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルト精度の 15 と見なされます。 結果の文字列に含まれる指数文字 "E" の後ろには、常に、プラス記号かマイナス記号と、少なくとも 3 桁の数字が続きます。

f

固定。 引数は浮動小数点値でなければなりません。 値は、"-ddd.ddd..." の形式の文字列に変換されます。 負の数値の場合、結果の文字列はマイナス記号で始まります。 小数点より後ろの桁数は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルトの 10 進 2 桁と見なされます。

g

一般。 引数は浮動小数点値でなければなりません。 値は、固定形式または科学表記形式を使用して、できるだけ短い 10 進数の文字列に変換されます。 結果の文字列の有効桁数は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルト精度の 15 と見なされます。 末尾のゼロは結果の文字列から削除され、小数点は必要な場合にのみ表示されます。 値の小数点より左の桁数が指定された精度以下の場合で、その値が 0.00001 以上の場合、結果の文字列には固定小数点形式が使用されます。 それ以外の場合、結果の文字列には科学表記形式が使われます。

n

数。 引数は浮動小数点値でなければなりません。 値は、"-d,ddd,ddd.ddd..." という形式の文字列に変換されます。 n 形式は、結果の文字列に 3 桁ごとの区切り文字が含まれることを除くと、f 形式と同じです。

m

金額。 引数は浮動小数点値でなければなりません。 値は、通貨金額を表す文字列に変換されます。 変換は、グローバル変数 CurrencyStringCurrencyFormatNegCurrFormatThousandSeparatorDecimalSeparator、および CurrencyDecimals、または TFormatSettings データ構造の中のこれらに相当するもので制御します。 書式文字列に精度指定子が含まれている場合は、グローバル変数 CurrencyDecimals、またはその TFormatSettings 相当によって指定される値を上書きします。

p

ポインタ。 引数は、ポインタ値でなければなりません。 値は、16 進数のポインタ値を表す 8 文字の文字列に変換されます。

s

文字列。 引数は、文字、文字列、または PChar 値でなければなりません。 文字列または文字が、書式指定子の代わりに挿入されます。 書式文字列に精度指定子がある場合は、その指定子で結果の文字列の最大長が指定されます。 引数がこの最大長より長い文字列であれば、その文字列は切り詰められます。

x

16 進数。 引数は整数値でなければなりません。 値は、16 進数の文字列に変換されます。 書式文字列に精度指定子が含まれている場合は、それによって結果の文字列に、最低でも、指定された桁数がなければいけないことを示します。指定より桁数の少ない値の場合は、結果の文字列の左側をゼロで埋めます。

変換文字は大文字と小文字のどちらで指定しても構いません。結果は同じになります。

% という文字を表示するには(つまり、書式指定子の開始を示すのではなく、% というリテラルを表示するには)、%% というシーケンスを使用します。 例:

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

すべての浮動小数点形式について、3 桁ごとの区切り文字として使用される実際の文字は、グローバル変数 DecimalSeparator および ThousandSeparator、または、TFormatSettings のそれに相当するものから取得します。

インデックス、幅、および精度の指定子は、10 進数文字列を使って直接指定する("%10d" など)か、アスタリスク文字を使って間接的に指定する("%*.*f" など)ことができます。アスタリスクを使用すると、引数リスト内の次の引数が実際に使用される値になります。幅は整数値、精度は符号なし整数値であることに注意してください。 次に例を示します。

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

これは、次と同じ意味です。

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

同様に、C++ の場合、

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

これは、次と同じ意味です。

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

幅指定子は、変換におけるフィールドの最小幅を設定します。 結果の文字列がフィールドの最小幅に満たない場合は、空白を埋めてフィールド幅を増やします。 デフォルトでは、結果を右寄せして、値の前に空白を追加しますが、書式指定子に左寄せ指示子(幅指定子の前の "-"(半角ダッシュ))文字)があれば、結果は左寄せされて、値の後ろに空白を追加します。

インデックス指定子は、現在の引数リストのインデックスを指定された値に設定します。 引数リストにある最初の引数のインデックスは 0 です。 インデックス指定子を使用すると、同じ引数の形式指定を複数回行うことができます。 たとえば、"Format('%d %d %0:d %1:d', [10, 20])" と指定すると、文字列 '10 20 10 20' が作成されます。

メモ: インデックス指定子を設定すると、その後の形式設定に影響します。 たとえば、"Format('%d %d %d %0:d %d', [1, 2, 3, 4]) " と指定すると、返される文字列は '1 2 3 1 4' ではなく '1 2 3 1 2' です。 '1 2 3 1 4' という結果を得るには、"Format('%d %d %d %0:d %3:d', [1, 2, 3, 4])" と指定する必要があります。

関連項目

コード サンプル