6

基本的にC#を使用しています。そこで私はできる:

string trimmed = str.Trim('\t');

文字列から集計をトリミングしstr、結果を に返しtrimmedます。

delphi7Trimでは、スペースを削除する のみが見つかりました。

どうすれば同じ機能を実現できますか?

4

6 に答える 6

7

これは、それがどこにあるかを見つけるよりも作成する方が簡単な場合がある一種の手順です:)

function TrimChar(const Str: string; Ch: Char): string;
var
  S, E: integer;
begin
  S:=1;
  while (S <= Length(Str)) and (Str[S]=Ch) do Inc(S);
  E:=Length(Str);
  while (E >= 1) and (Str[E]=Ch) do Dec(E);
  SetString(Result, PChar(@Str[S]), E - S + 1);
end;
于 2012-11-21T05:11:50.373 に答える
3

Delphi では、Trim 関数はパラメータを取りませんが、スペースだけでなく他の文字も削除します。これがコードです(XE2のSystem.SysUtilsから、変更されていないと思います):

function Trim(const S: string): string;
var
  I, L: Integer;
begin
  L := Length(S);
  I := 1;
  if (L > 0) and (S[I] > ' ') and (S[L] > ' ') then Exit(S);
  while (I <= L) and (S[I] <= ' ') do Inc(I);
  if I > L then Exit('');
  while S[L] <= ' ' do Dec(L);
  Result := Copy(S, I, L - I + 1);
end;

タブ、キャリッジ リターン、ライン フィードなどの制御文字を削除する ' ' 未満のものをトリミングしています。

于 2012-11-21T05:20:08.767 に答える
2

Delphiはあなたが望むことをする機能を提供していません。組み込みTrim関数は、入力文字列の両端から常に同じ文字セット(空白文字と制御文字)をトリミングします。ここでのいくつかの回答は、任意の文字をトリミングするための基本的な手法を示しています。ご覧のとおり、複雑にする必要はありません。これが私のバージョンです:

function Trim(const s: string; c: Char): string;
var
  First, Last: Integer;
begin
  First := 1;
  Last := Length(s);
  while (First <= Last) and (s[First] = c) do
    Inc(First);
  while (First < Last) and (s[Last] = c) do
    Dec(last);
  Result := Copy(s, First, Last - First + 1);
end;

複数の文字をトリミングするためにそれを適応させるためにあなたがしなければならないのは、各ループの2番目の条件付き項を変更することだけです。何に変更するかは、複数の文字をどのように表現するかによって異なります。C#は配列を使用します。すべての文字を文字列に入れることも、Delphiのネイティブセットタイプを使用することもできます。

function Trim(const s: string; const c: array of Char): string;
// Replace `s[x] = c` with `CharInArray(s[x], c)`.

function Trim(const s: string; const c: string): string;
// Replace `s[x] = c` with `CharInString(s[x], s)`.

function Trim(const s: string; const c: TSysCharSet): string;
// Replace `s[x] = c` with `s[x] in c`.

および関数は簡単に記述できますCharInArrayCharInString

function CharInArray(c: Char; ar: array of Char): Boolean;
var
  i: Integer;
begin
  Result := True;
  for i := Low(ar) to High(ar) do
    if ar[i] = c then
      exit;
  Result := False;
end;
// CharInString is identical, except for the type of `ar`.

Delphi 2009の時点でCharは、はのエイリアスでWideCharあり、セットに収まるには大きすぎるため、入力が常にに収まることが保証されていない限り、セットバージョンを使用できないことを思い出してくださいAnsiChar。さらに、構文は引数s[x] in cに対して警告を生成するため、代わりに使用することをお勧めします。(とは異なり、RTLは、それを必要とするDelphiバージョンに対してすでに提供しています。)WideCharCharInSet(s[x], c)CharInArrayCharInStringCharInSet

于 2012-11-21T14:38:13.657 に答える
0

JEDI JCL v2.7 は、必要に応じて次の便利な機能を提供します。

function StrTrimCharLeft(const S: string; C: Char): string; function StrTrimCharsLeft(const S: string; const Chars: TCharValidator): string; overload; function StrTrimCharsLeft(const S: string; const Chars: array of Char): string; overload; function StrTrimCharRight(const S: string; C: Char): string; function StrTrimCharsRight(const S: string; const Chars: TCharValidator): string; overload; function StrTrimCharsRight(const S: string; const Chars: array of Char): string; overload; function StrTrimQuotes(const S: string): string;

于 2016-03-18T11:47:51.707 に答える