記事カテゴリ

ユーザー機能


 2024年4月20日(土) 17:35 JST

[Delphi] 全角スペース文字対応のTrim

  • 投稿者:
  • 表示回数
    14,171

Delphiの標準関数(Trim、TrimLeft、TrimRight)は全角の空白を取り除いてくれません。 全角空白を取り除くためには、ループしてこの文字を見つけて取り除く必要があります。以下に全角対応のTrimを作成しました。

※2012/05/02 Unicode対応

  • ZTrim ... 全角対応 Trim
  • LTrim ... 全角対応 TrimLeft
  • RTrim ... 全角対応 TrimRight
///全角対応トリム
///トリム対象文字列
/// トリム処理後文字列
const
  SPACE = ' ';
  ZENSPC = ' ';

function LTrim(s: String): String;
var
  i, iLast: integer;
begin
  i := 1;
  iLast := Length(s);

  while true do
  begin
    if (Copy(s, i, 1) = SPACE) then                         // 半角空白
      inc(i)
{$IFDEF UNICODE}
    else if (Copy(s, i, 1) = ZENSPC) then                   // 全角空白
      inc(i)
{$ELSE}
    else if ((Length(s) >= 2) and (Copy(s, i, 2) = ZENSPC)) then  // 全角空白
      inc(i, 2)
{$ENDIF}
    else
      break;
  end;
  Result := Copy(s, i, iLast - i +1);
end;

function RTrim(s: String): String;
var
  i: integer;
begin
  i := Length(s);
  while (i > 0) do
  begin
    if (Copy(s, i, 1) = SPACE) then                         // 半角空白
      dec(i)
{$IFDEF UNICODE}
    else if (Copy(s, i, 1) = ZENSPC) then                   // 全角空白
      dec(i)
{$ELSE}
    else if ((Length(s) >= 2) and (Copy(s, i-1, 2) = ZENSPC)) then  // 全角空白
      dec(i, 2)
{$ENDIF}
    else
      break;
  end;
  Result := Copy(s, 1, i);
end;

function ZTrim(s: String): String;
begin
  Result := RTrim(LTrim(s));
end;

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0025

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。