대량 텍스트 파일에서 마지막 10줄을 효율적으로 검색
매우 큰 텍스트에서 마지막 10줄을 추출하는 가장 효율적인 접근 방식 결정 파일(10GB 초과)에는 컴퓨팅 작업을 최소화하는 전략이 필요합니다.
파일 위치 지정 및 역방향 탐색 활용
권장되는 접근 방식은 Seek() 메서드를 사용하여 파일의 끝으로 이동한 후 계속해서 뒤로 이동하는 것입니다. 10개의 줄바꿈이 나타날 때까지 파일을 작성하세요. 줄 수를 유지함으로써 이 메서드는 앞으로 읽고 원하는 줄을 검색하기 위한 정확한 시작 지점을 식별합니다. 이 전략은 10줄 미만의 줄을 포함하여 다양한 줄 수의 파일을 효율적으로 처리합니다.
C#의 구현 예
다음 C# 코드는 앞서 언급한 접근 방식은 인코딩으로 인코딩되고 다음으로 구분된 파일에서 마지막 토큰 수를 찾도록 일반화되었습니다. tokenSeparator:
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of tokens in file is less than numberOfTokens fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
이 기술을 활용하면 메모리 사용량과 계산 복잡성을 최소화하면서 대용량 텍스트 파일에서 마지막 10줄을 검색할 수 있어 이러한 일반적인 파일 처리 시나리오에 대한 효율적인 솔루션을 제공합니다.
위 내용은 매우 큰 텍스트 파일에서 마지막 10줄을 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!