Rad StudioXE2のHyperStringParseWord関数を置き換えるdelphi関数を作成するには、正規表現のヘルプが必要です。HyperStringは、Unicodeにジャンプしたことのない非常に便利な文字列ライブラリでした。私はそれをほとんど機能させていますが、引用符の区切り文字をまったく尊重していません。以下に説明する関数と完全に一致する必要があります。
関数ParseWord(const Source、Table:String; var Index:Integer):String;
1文字の区切り文字のテーブルを使用した、左から右への順次トークン解析。引用符で囲まれた文字列内の区切り文字は無視されます。表では引用区切り文字は使用できません。
インデックスは、次の単語を指すように関数によって更新されるポインタ(最初の単語の場合は「1」に初期化)です。次の単語を取得するには、前に返されたインデックス値を使用して関数を再度呼び出すだけです。
注:Length(Resultant)= 0の場合、追加の単語は使用できません。 引用符で囲まれた文字列内の区切り文字は無視されます。(私の強調)
これは私がこれまでに持っているものです:
function ParseWord( const Source, Table: String; var Index: Integer):string;
var
RE : TRegEx;
match : TMatch;
Table2,
chars : string;
begin
if index = length(Source) then
begin
result:= '';
exit;
end;
// escape the special characters and wrap in a Group
Table2 :='['+TRegEx.Escape(Table, false)+']';
RE := TRegEx.create(Table2);
match := RE.Match(Source,Index);
if match.success then
begin
result := copy( Source, Index, match.Index - Index);
Index := match.Index+match.Length;
end
else
begin
result := copy(Source, Index, length(Source)-Index+1);
Index := length(Source);
end;
end;
while ( Length(result)= 0) and (Index<length(Source)) do
begin
Inc(Index);
result := ParseWord(Source,Table, Index);
end;
歓声と感謝。