stringlist (ファイルからロード) で行番号を取得したい。Indexof は正確に一致しているようです。Indexof のワイルドカード バージョンで行を取得する方法はありますか? SL.Indexof('?sometext') のようなもの?
ありがとう!
別の回答へのコメントで示すように、派手なワイルドカードを使用せずに文字列の一部を一致させたい場合は、次のような単純な関数を使用できます。
function FindMatchStr(Strings: TStrings; const SubStr: string): Integer;
begin
for Result := 0 to Strings.Count-1 do
if ContainsStr(Strings[Result], SubStr) then
exit;
Result := -1;
end;
大文字と小文字を区別しない一致が必要な場合は、これを使用できます。
function FindMatchText(Strings: TStrings; const SubStr: string): Integer;
begin
for Result := 0 to Strings.Count-1 do
if ContainsText(Strings[Result], SubStr) then
exit;
Result := -1;
end;
ContainsStr
およびRTL ユニットでContainsText
定義され、大文字と小文字を区別する比較を示し、大文字と小文字を区別しない比較を示す標準規則に従います。StrUtils
Str
Text
TStringList
ワイルドカードを検索する組み込みの方法はありません。正規表現にはTPerlRegExなどのサードパーティ ライブラリを使用する必要があります。
TStringList で使用するために David Heffernan の応答を適応させると、関数は次のようになります。
function Util_StrLst_GetLineFromSubstr(iStrlst: TStringList; iSubstr: string): Integer;
begin
for Result := 0 to iStrlst.Count-1 do
if (Pos(iSubstr, iStrlst[Result]) > 0) then
Exit;
Result := -1;
end;