文字列を1文字ではなく複数文字の区切り文字で分割するDelphi関数はありますか?
たとえば、この関数を次のように使用する場合:
SplitString('Whale<->Mammal<->Ocean', '<->')
これらの3つの文字列の結果が得られます。
'Whale', 'Mammal', 'Ocean'
このためにDelphiにそのような機能はありますか?
TStringListを使用した別の非常に単純なソリューションがあります。 LineBreakを変更します。
procedure TForm208.Button1Click(Sender: TObject);
var
lst: TStringList;
begin
lst := TStringList.Create;
try
lst.LineBreak := '<->';
lst.Text := 'Whale<->Mammal<->Ocean';
Memo1.Lines := lst;
finally
lst.Free;
end;
end;
Cromis Library の一部である私のStringUtils.pasユニットを確認できます。
そこには簡単なテキストトークナイザーがあります。しかし、おそらくあなたが必要なものです。インターフェースはそのようなものです
TTextTokenizer = class
private
FTokens: TTokens;
FDelimiters: array of ustring;
public
constructor Create;
procedure Tokenize(const Text: ustring);
procedure AddDelimiters(const Delimiters: array of ustring);
property Tokens: TTokens read FTokens;
end;
文字列を区切り文字として、また複数の区切り文字としてサポートします。
[〜#〜] jcl [〜#〜] がインストールされている場合、jclStrings
ユニットにはStrToStrings
プロシージャがあります。
var sl: TStringList;
begin
sl := TStringList.Create;
StrToStrings('Whale<->Mammal<->Ocean' , '<->' , sl);
Delphiに、文字列を区切り文字として使用する標準の分割プロシージャがあるかどうかはわかりません。しかし、あなたはそれが持っているかどうかにかかわらずあなた自身を書くことができます:
procedure SplitStr(const Source, Delimiter: String; var DelimitedList: TStringList);
var
s: PChar;
DelimiterIndex: Integer;
Item: String;
begin
s:=PChar(Source);
repeat
DelimiterIndex:=Pos(Delimiter, s);
if DelimiterIndex=0 then Break;
Item:=Copy(s, 1, DelimiterIndex-1);
DelimitedList.Add(Item);
inc(s, DelimiterIndex + Length(Delimiter)-1);
until DelimiterIndex = 0;
DelimitedList.Add(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl:=TStringList.Create;
SplitStr('delphi++split++string++','++',sl);
//do something with the list
sl.Free;
end;
それが役に立てば幸い..
'ボックスから'そのような関数はありません。文字列に通常の「適切な」テキストが含まれている場合は、エキゾチックなシンボルでStringReplaceを使用できます。それ以外の場合は、PosまたはIdStrings.SplitStringを使用して独自の分割関数を作成することは難しくありません(D2010で使用可能な場合)。
function SplitStringByStr(const S, StrDelimiter: string): TStringDynArray;
var
tmp: string;
begin
tmp := StringReplace(S, StrDelimiter, '`', [rfReplaceAll]);
Result := SplitString(tmp, '`');
end;
Delphiの新しいバージョンには、これを行うstringhelperがあります。
var
lStr: string;
lSplitStr: TArray<string>;
begin
lStr := 'Whale<->Mammal<->Ocean';
lSplitStr := lStr.Split('<->');
end;
これで、lSplitStrは、「クジラ」、「哺乳類」、「海」の3つの要素を持つ配列になります。