単一の文字ではなく複数文字の区切り文字で文字列を分割する Delphi 関数はありますか?
たとえば、その関数を次のように使用する場合:
SplitString('Whale<->Mammal<->Ocean', '<->')
これらの 3 つの文字列の結果が得られます。
'Whale', 'Mammal', 'Ocean'
このためにDelphiにそのような機能はありますか?
単一の文字ではなく複数文字の区切り文字で文字列を分割する Delphi 関数はありますか?
たとえば、その関数を次のように使用する場合:
SplitString('Whale<->Mammal<->Ocean', '<->')
これらの 3 つの文字列の結果が得られます。
'Whale', 'Mammal', 'Ocean'
このためにDelphiにそのような機能はありますか?
TStringList を使用した別の非常に簡単なソリューションがあります。改行を変更します。
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ライブラリの一部である私の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;