私のプログラムで読み込まれた.ged接尾辞付きのテキストファイルを検索する "ファイル検索"機能があります。デルファイの多くのファイルの最初の行を効率的に読み取るには
私は標準関数は、FindFirst/FindNextのメソッドを使用しており、これは非常に迅速に動作します:私はこのようになりますエクスプローラのようなウィンドウで見出された結果を表示します。上記の584ファイルが数秒で見つけられて表示されます。
ここでは、これらのファイルに含まれる「ソース」と「バージョン」を示す2つの列をディスプレイに追加します。この情報は、のように見えるの行に、各ファイルの最初の10行以内に通常発見された:
1 SOUR FTM
2 VERS Family Tree Maker (20.0.0.368)
は今、私は非常に迅速に自分自身をこれを解析する問題がない、それは私が求めているものではありません。
私が助けが必要なのは、これらのファイルから最初の10行ほどを読み込んで解析する方法です。
私はStringList.LoadFromFileを実行しようとしましたが、1 MB以上の大きなファイルをロードするには時間がかかります。
私は最初の10行程度しか必要ないので、どうすればそれらを得るのがベストでしょうか?
私はDelphi 2009を使用しています。私の入力ファイルはUnicodeかもしれないし、そうでないかもしれないので、これはどんなエンコーディングでも動作する必要があります。正常に動作おかげアントニオ、
私はこれをやってしまった:
フォロー
var
CurFileStream: TStream;
Buffer: TBytes;
Value: string;
Encoding: TEncoding;
try
CurFileStream := TFileStream.Create(folder + FileName, fmOpenRead);
SetLength(Buffer, 256);
CurFileStream.Read(Buffer[0], 256);
TEncoding.GetBufferEncoding(Buffer, Encoding);
Value := Encoding.GetString(Buffer);
...
(parse through Value to get what I want)
...
finally
CurFileStream.Free;
end;
TStrings.LoadFromFileは非常に非効率的です。忘れてしまいます。ボックスから考えて、妥当な数(NumLines * AvgLineLengthなど)のバイト数を読み、LineStartで切り捨ててからTStringに分割してください。 –
実際には、Worm、それはあなたが考えると悪くありません。約10 MB /秒の読み込みと読み込みが可能です。私はそれらのファイルのテキストを検索する必要があるときに、私はまだ正常に使用します。しかし、ファイル全体を読み込んで、最初の数行だけが必要なときにユーザーが40秒待つようにするのはなぜでしょうか。 – lkessler