6

stringlist (ファイルからロード) で行番号を取得したい。Indexof は正確に一致しているようです。Indexof のワイルドカード バージョンで行を取得する方法はありますか? SL.Indexof('?sometext') のようなもの?

ありがとう!

4

3 に答える 3

9

別の回答へのコメントで示すように、派手なワイルドカードを使用せずに文字列の一部を一致させたい場合は、次のような単純な関数を使用できます。

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定義され、大文字と小文字を区別する比較を示し、大文字と小文字を区別しない比較を示す標準規則に従います。StrUtilsStrText

于 2011-06-14T09:44:59.660 に答える
7

TStringListワイルドカードを検索する組み込みの方法はありません。正規表現にはTPerlRegExなどのサードパーティ ライブラリを使用する必要があります。

于 2011-06-14T09:18:41.480 に答える
0

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;
于 2020-04-18T17:59:05.837 に答える