ホームページ >バックエンド開発 >Golang >イディオム Go では、(1 バイトではなく) 正確に N 行のテキストを読み取りますか?

イディオム Go では、(1 バイトではなく) 正確に N 行のテキストを読み取りますか?

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」は、バッファーされた読み取りがどこで終了するかを制御できないことを意味し、Past を読み取る可能性があることに気付きました。実際の開始位置CSV。

そこで私は、6 つの改行 (10) を数えるまでバイトごとに読み取る方法を考え出しました。 リーリー

これはうまくいきます。しかし、もっと慣用的な Go の方法はあるでしょうか?

回避策

bufioの使用を避ける必要はありません。実際、可能な限りバッファ付き IO の使用を選択する必要があります。できないことは、bufio.Reader 経由でアクセスした後に元のリーダーを使用することです。つまり、bufio.NewReader を使用した後に os.File を渡さないでください。 csv.NewReader には、ファイルから読み取られたデータが含まれる可能性がある bufio.Reader を引き続き使用します。

#bufio.Reader

を取得すると、バイトごとに読み取ることを気にせずに、すべてのメソッドを使用してストリームの一部を読み取ることができます。 リーリー

完全な例

以上がイディオム Go では、(1 バイトではなく) 正確に N 行のテキストを読み取りますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。