Go에서 bufio.Scanner 패키지는 파일을 한 줄씩 읽는 편리한 방법을 제공합니다. 그러나 기본적으로 Scanner는 특정 줄 번호를 건너뛰거나 읽는 방법을 제공하지 않습니다. 이를 달성하려면 Scanner의 기본 동작을 수정해야 합니다.
라인 경계를 결정하는 사용자 정의 분할 기능을 생성하여 Scanner를 확장할 수 있습니다. 파일 위치를 유지합니다. 다음 줄 바꿈 및 줄을 토큰으로 바이트 단위로 반환하는 분할 함수를 정의해 보겠습니다.
func scanLinesWithPosition(data []byte, atEOF bool) (advance int, token []byte, err error) { advance, token, err = bufio.ScanLines(data, atEOF) return // Advance and Token are calculated }
다음으로 Scanner.Split 메서드를 사용하여 사용자 지정 분할 함수를 설정할 수 있습니다.
scanner := bufio.NewScanner(inputFile) scanner.Split(scanLinesWithPosition)
사용자 지정 분할 기능을 사용하면 파일 위치를 유지하면서 줄을 읽을 수 있습니다. 다음은 기존 코드의 수정된 버전입니다.
// ... (Code from your post) func main() { // ... (Code from your post) scanner := bufio.NewScanner(inputFile) scanner.Split(scanLinesWithPosition) var currentLine int for scanner.Scan() { currentLine++ if currentLine > progress { fmt.Println(scanner.Text()) } } // ... (Code from your post) }
이제 코드는 줄을 읽고, 이미 처리된 줄을 건너뛰고(진행 변수에 따라) 현재 줄 번호를 유지합니다. 진행값을 조정하여 출발선 번호를 조절할 수 있습니다.
위 내용은 Go에서 스캐너를 사용하여 특정 줄 번호에서 파일을 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!