数値から文字列への変換

直接出力せず、任意の数の変数を連結して完全な文字列にまとめたい場合、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 ユニット内):

  • 数値→文字列:IntToStrFloatToStrFormatFloat(浮動小数点の書式をカスタマイズ)
  • 文字列→数値に復元:StrToIntStrToIntDefStrToFloat

完全実行可能なサンプルコード

{$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)
メリット
  1. 柔軟性が非常に高く、整数・浮動小数・日付など大半の型に対応した細分化関数が用意されている;
  2. 逆変換用の関数が充実しており、ユーザー入力文字列を解析する際に便利。
デメリット

変数が多くなると、+ を多重に重ねた記述が長くなり可読性が低下する。


フォーマット関数 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)

メリット

  1. フォーマットテンプレートとデータが分離され構造がスッキリ;ソフトの多言語対応時はテンプレート文字列のみ修正すればよく、変数リストを変更する必要がない;
  2. コンパイラ側の特殊な隠し処理が存在しない。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)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です