Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Delphi 全角を含むスペースをTrimする方法

今回はDelphi/400で全角スペース文字をTrimするプログラミングテクニックをご紹介いたします。

Delphiでは文字列の前後のスペースを取り除くTrimという関数があります。

例えばEdit1に”_ABC__”(「_」は半角スペース)という文字列が設定されていた場合、
次のように処理すると”ABC”という文字列にすることができます。

  // 例)
  Edit1.Text := Trim(Edit1.Text);

しかし、この関数は半角スペースしか取り除くことができません。

例えばEdit1に”ABC__”(「_」は全角スペース)という文字列が設定されていた場合、
上記と同じ処理をしても”ABC__”という文字列のままです。

 

これを考慮して全角スペースに対応させるTrim関数を作成しておくととても便利です。
ここでは仮にJTrimという関数名の例とします。

{*******************************************************************************
 目的:全角スペースに対応したTrim処理
 引数:S - 元の文字列
 戻値:全半角スペースTrim後の文字列
*******************************************************************************}
function JTrim(const S: String): String;
var
  WS: String; // (V2007以前の場合はWideStringで定義してください)
  I, L: Integer;
begin
  WS := S;          // 変数に保持
  L  := Length(WS); // 元の文字列の長さから、終点の位置を保持
  I  := 1;          // 起点の位置(初期値は1)

  // 1文字ずつチェックし、先頭に半角または全角スペースがある場合、起点の位置をずらす
  while (I <= L) and ((WS[I] <= ' ') or (WS[I] = ' ')) do
  begin
    Inc(I);
  end;

  // 文字列がすべて半角または全角スペースだった場合「I > L」となるので終了
  if I > L then
  begin
    Result := '';
  end

  // 1文字ずつチェックし、終端に半角または全角スペースがある場合、終点の位置をずらす
  else
  begin
    while (WS[L] <= ' ') or ((WS[L] = ' ')) do
    begin
      Dec(L);
    end;

    // 最後にCopy関数で、ずらした起点~終点の範囲にある文字だけを取り出す
    Result := Copy(WS, I, L - I + 1);
  end;
end;

 

一度共通関数として作成してしまえば、日本語を入力する画面などで役立ちますので、
是非ご活用ください。

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.196 2017年3月号より)