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

WBOY
リリース: 2024-02-09 08:40:09
転載
991 人が閲覧しました

惯用语 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート