>백엔드 개발 >Golang >관용어 Go에서 정확히 N 줄(1바이트 대신)의 텍스트를 읽으시겠습니까?

관용어 Go에서 정확히 N 줄(1바이트 대신)의 텍스트를 읽으시겠습니까?

WBOY
WBOY앞으로
2024-02-09 08:40:091024검색

惯用语 Go 精确读取 N 行(而不是一个字节)的文本?

PHP 편집기 Apple은 지정된 수의 텍스트 줄(1바이트가 아님)을 정확하게 읽는 Go 관용구를 소개합니다. 텍스트 파일로 작업할 때 바이트 단위로 읽는 대신 특정 행 수를 읽어야 하는 경우가 많습니다. Go 언어의 bufio 패키지를 사용하면 이 목표를 쉽게 달성할 수 있습니다. 다음으로, 지정된 수의 텍스트 줄을 정확하게 읽는 기능을 달성하기 위해 이 관용구를 사용하는 방법을 자세히 설명하겠습니다. 함께 탐험해 보세요!

질문 내용

다음과 같은 CSV가 아닌 프리앰블을 추가하는 보고서 생성기의 CSV가 있습니다.

으아악

파일의 io.Reader를 csv.NewReader에 전달하고 ReadAll()을 시도하기 전에 이 6줄을 삭제해야 하므로 6줄 이후의 바이트를 읽지 않도록 해야 합니다.

처음에는 bufio.Scanner를 생각하고 루프에서 Scan()을 6번 호출했지만 나중에 실험을 통해 bufio의 "buf"는 버퍼링된 읽기가 끝나는 위치를 제어할 수 없으며 읽기보다 더 많이 읽을 수 있음을 의미한다는 것을 깨달았습니다. 실제 시작 위치 CSV.

그래서 나는 6개의 줄 바꿈(10)을 셀 때까지 바이트 단위로 읽는 솔루션을 생각해 냈습니다.

으아악

이렇게 작동합니다. 하지만 좀 더 관용적인 Go 방식이 있을까요?

해결 방법

파일에서 읽은 데이터가 포함될 수 있는 bufio,事实上您应该尽可能选择使用缓冲 IO。您不能做的是通过 bufio.Reader 访问它之后使用原始阅读器,即,在使用 bufio.NewReader 后,不要将 os.File 传递给 csv.NewReader,继续使用 bufio.Reader 사용을 피할 필요는 없습니다.

만약 bufio.Reader이 있으면 바이트 단위로 읽는 것에 대해 걱정하지 않고 모든 방법을 사용하여 스트림의 일부를 읽을 수 있습니다.

으아악

전체 예시

위 내용은 관용어 Go에서 정확히 N 줄(1바이트 대신)의 텍스트를 읽으시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제