내 프로그램에서 내 프로그램에서 읽는 .ged 접미사가있는 텍스트 파일을 찾을 수있는 "파일 찾기"기능이 있습니다. 델파이의 여러 파일 중 몇 줄을 효율적으로 읽을 수 있습니까?
내가 표준의 FindFirst/FindNext 방법을 사용하고, 이것은 매우 빠르게 작동합니다 :이처럼 보이는 탐색기와 같은 창에 발견 된 결과를 표시합니다. 위에 표시된 584 개의 파일이 몇 초 내에 검색되고 표시됩니다.내가 지금하고 싶은 것은 디스플레이에 두 개의 열을 추가하여 각 파일에 포함 된 "소스"와 "버전"을 표시하는 것입니다. 이 정보는 다음과 같다 라인에 각 파일의 처음 10 줄에서 일반적으로 발견된다 :
1 SOUR FTM
2 VERS Family Tree Maker (20.0.0.368)
가 지금은 매우 빠르게 자신이 구문 분석 아무런 문제가없고, 그게 내가 부탁 해요 것이 아니다.
내가 도움이 필요한 것은 단순히 이들 파일에서 처음 10 줄 정도를로드하여 구문 분석 할 수 있도록하는 것입니다.
StringList.LoadFromFile을 시도했지만, 1MB 이상의 큰 파일을로드하는 데 너무 많은 시간이 걸립니다.
처음 10 줄 정도만 필요하기 때문에 어떻게하면 좋을까요?
저는 델파이 2009를 사용하고 있습니다. 입력 파일은 유니 코드 일 수도 유니 코드가 아닐 수도 있습니다. 따라서 모든 인코딩에서 작동해야합니다. 잘 작동 감사 안토니오,
내가이 일을 결국 :
후속 조사
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로 자른 다음 TStrings로 나눕니다. –
실제로 웜은 생각만큼 나쁘지 않습니다. 그것은 약 10 MB 초를 읽고로드 할 수 있습니다. 나는 그 파일들에서 텍스트들을 검색해야 할 때 그것을 성공적으로 사용한다. 하지만 전체 파일을로드하고 처음 몇 줄만 필요할 때 사용자가 40 초를 기다리는 이유는 무엇입니까? – lkessler