2016-12-28 5 views
3

私はいくつかの例から始めて、Golangを新しく使いました。現在、私がしようとしているのは、ファイルをある行で読み込み、ある条件を満たす場合に別の文字列に置き換えることです。 ファイルはテスト目的のための使用は4行が含まれています:ファイル内の行をGolangに置き換える

one 
two 
three 
four 

そのファイルで作業したコードは次のようになります:コードスニペットで見ることができるように、私は交換したい

​​

この文字列がファイルから読み込まれるとすぐに "This is a test"という文字列 "two"を返します。 ファイル内の現在の位置を取得するには、Goのシークメソッドを使用します。

one 
two 
three 
This is a test 

に現在のファイル位置を書き込みprint文の出力を調べる: はしかし、何が起こるかは、常に最後の行はこのように見ているファイルを作り、これはテストあるに置き換えてしまうことです

2016/12/28 21:10:31 Try to read ... 
2016/12/28 21:10:31 Position in file is: 19 

だから、最初の読み取りの後、位置カーソルはすでに新しい文字列を取得する理由を説明私のファイルの末尾を指す:ターミナルは、私が最初の行がを読まれた後の出力のようなものを取得します付随する最後までd。誰がここで何が起きているのか、それとも何がその行動を引き起こしているのかを理解していますか?

答えて

3

リーダーはfile.Seekでコントローラではありません。あなたは読者をreader := bufio.NewReader(file)と宣言しており、一度に1行読むのはbytes, _, _ := reader.ReadLine()ですが、file.Seekは読者が読んでいる位置を変更しません。

文書でReadSeekerについて読んで、それを使用するように提案してください。 SectionReaderを使用した例もあります。

+0

私はこれに行きます、thx @miltonb :) – pklndnst

関連する問題