今回は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月号より)