數值轉字串

若不想直接輸出列印,而是將任意數量變數拼接成完整字串,Pascal 提供三種主流實作方式:

專用轉換函式拼接

***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:浮點數,保留四位小數;%s:字串佔位符
  • 第二個參數為常數陣列,依序填入各佔位符

完整範例

{$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)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *