特定の文字列を見つけるために、TextFile を 1 行ずつ検索することは可能ですか。すなわち。Hello 行ごとに検索して、行に Hello が含まれているかどうかを調べます。1 行に 1 つの文字列しかありません。これは可能ですか?もしそうなら、どうやってこれを試みますか?
10877 次
2 に答える
7
ファイル全体をメモリにロードするのが確かに最も簡単です。ファイルが十分に小さい場合は、次のように実行できます。
found := false;
sl := TStringList.Create;
try
sl.LoadFromFile(fileName);
for line in sl do
if Pos('Hello', line)<>0 then
begin
found := true;
break;
end;
finally
sl.Free;
end;
私はあなたが言うとき
いずれかの行にHelloが含まれている場合
検索文字列と等しい行ではなく、検索文字列を含む行を探していること。
コメントであなたは尋ねます:
では、編集ボックスから入力した文字列をファイルから削除する方法を尋ねることができるかどうかを尋ねることはできますか?それで、編集ボックスに文字列を入力すると、ファイルでその文字列が検索され、その行が削除されますか?
これは、上記の簡単なバリエーションです。
procedure RemoveLinesContaining(const fileName, searchText: string);
var
sl: TStringList;
i: Integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(fileName);
for i := sl.Count-1 downto 0 do
if Pos(searchText, sl[i])<>0 then
sl.Delete(i);
sl.SaveToFile(fileName);
finally
sl.Free;
end;
end;
この関数は、検索文字列を含むすべての行を削除します。そのような最初の行だけを削除したい場合は、Deleteを呼び出した後にforループから抜け出します。
ループ変数は、ループがリストを変更できるように降順です。
別のテストを使用する場合は、containsではなくequalityと言ってから、ifステートメントを変更するだけです。
于 2012-08-24T06:38:55.943 に答える
1
簡単な方法は、 を使用TStringList.LoadFromFile
してファイルをロードし、チェックIndexOf('hello')
することです。値が より大きい場合-1
、文字列はファイル内にあります。
var
sl : TStringList;
ix : Integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('test.txt');
ix := sl.IndexOf('Hello');
if ix > -1 then ShowMessage('Yup, the file contains a greeting.');
finally
sl.Free;
end;
end;
于 2012-08-24T05:05:14.360 に答える