直接出力せず、任意の数の変数を連結して完全な文字列にまとめたい場合、Pascalには代表的な実装方法が3種類用意されています。
専用変換関数による文字列連結
***ToStr + 文字列 + 連結
専用変換関数で単一の型を個別に変換した後、+演算子で文字列を結合します。
uses SysUtils;
var
MyInt: Integer;
MyStr: string;
begin
MyInt := 123;
MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
end;Code language: JavaScript (javascript)
よく使用する付属関数(すべて SysUtils ユニット内):
- 数値→文字列:
IntToStr、FloatToStr、FormatFloat(浮動小数点の書式をカスタマイズ) - 文字列→数値に復元:
StrToInt、StrToIntDef、StrToFloat
完全実行可能なサンプルコード
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
uses SysUtils;
var
MyInt: Integer;
MyStr: string;
begin
MyInt := 180;
MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
WriteLn(MyStr);
end.Code language: PHP (php)

メリット
- 柔軟性が非常に高く、整数・浮動小数・日付など大半の型に対応した細分化関数が用意されている;
- 逆変換用の関数が充実しており、ユーザー入力文字列を解析する際に便利。
デメリット
変数が多くなると、+ を多重に重ねた記述が長くなり可読性が低下する。
フォーマット関数 Format
Format(C言語のsprintfと同様の仕組み)
基本構文
uses SysUtils;
var
Res: string;
MyInt: Integer;
MyFloat: Double;
MyString: string;
begin
Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
end;Code language: JavaScript (javascript)
%d:整数プレースホルダ;%.4f:浮動小数、小数点以下4桁を保持;%s:文字列プレースホルダ- 第2引数は定数配列で、先頭から順にプレースホルダへ値を埋め込む
完全なサンプル
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
uses SysUtils;
var
Res: string;
MyInt: Integer;
MyFloat: Double;
MyString: string;
begin
// set value
MyInt := 169;
MyFloat := 0.618;
MyString := 'foxdevelop.com';
Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
WriteLn(Res);
end.Code language: PHP (php)

メリット
- フォーマットテンプレートとデータが分離され構造がスッキリ;ソフトの多言語対応時はテンプレート文字列のみ修正すればよく、変数リストを変更する必要がない;
- コンパイラ側の特殊な隠し処理が存在しない。
array of const可変引数を持つ独自関数を定義することで本フォーマットロジックを再利用でき、引数をFormatに渡して処理を委譲可能。
デメリット
コンパイル時にプレースホルダと変数の型の整合性チェックが行われない;型が不一致すると実行時に EConvertError 変換例外が発生する(メモリアクセスクラッシュは起こらない)。
WriteStr
Writeの出力結果を文字列変数に格納
用途:Write/WriteLn と動作がほぼ同一だが、コンソール出力せず、結果を第一引数の文字列変数に保存する:
var S: string;
begin
WriteStr(S, 'Pi value: ', Pi:1:4);
end;Code language: JavaScript (javascript)
完全サンプル
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
uses SysUtils;
var S: string;
begin
WriteStr(S, 'Pi value: ', Pi:1:4);
WriteLn(S);
end.Code language: PHP (php)

Previous: 出力とログ
Next: ユニット(Units)