Go言語でファイルを1行ずつ読み込む方法です。
ファイルを開いてループ処理で1行ずつ処理したい場合ってありますよね?今回はそんなケースで利用できるコードです。
ファイルを一行ずつ読み込む方法
ファイルを読み込むためにbufioパッケージのbufio.NewScanner関数を使用して、ファイルオブジェクトをスキャナーに変換します。
bufio.Scanメソッドを使用することでファイルから1行ずつ読み込みます。ここがポイントです。あとは単純にfor文でループ処理として扱えばOKです。
Scanメソッドは読み込んだ1つの行を文字列として返します。最終行まで読み込みが完了するとScanメソッドはfalseを返します。
ということでGoでファイルを1行ずつ処理するサンプルコードです
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// ファイルを開く
file, err := os.Open("filename.txt")
if err != nil {
fmt.Println("ファイルが開けませんでした。")
return
}
defer file.Close()
// スキャナーを作成
scanner := bufio.NewScanner(file)
// ファイルを1行ずつ読み込む
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
// エラーが発生した場合の処理
if err := scanner.Err(); err != nil {
fmt.Println("読み込みエラーが発生しました。")
return
}
}
deferでファイルをcloseするのをお忘れなく。メモリが無駄になっちゃうからね。
エラーハンドリングとしてscanner.Err関数を使用してエラーを取得できます。