Baca fail dengan pembatas tersuai di Golang: Gunakan bufio.NewReader untuk mencipta objek Reader. Sediakan pembaca.Fungsi SplitFunc untuk mengembalikan kedudukan dan baris pemisah tersuai. Baca fail dalam gelung dan proseskannya baris demi baris.
Cara membaca fail dengan pembatas tersuai di Golang
Apabila membaca fail dalam Golang, pembatas lalai ialah baris baharu. Walau bagaimanapun, kadangkala kita mungkin perlu menggunakan pembatas tersuai untuk membaca fail. Artikel ini menerangkan cara membaca fail menggunakan pembatas tersuai.
Contoh Kod
package main import ( "bufio" "fmt" "log" "os" ) func main() { // 打开文件以进行读取 file, err := os.Open("data.csv") if err != nil { log.Fatal(err) } defer file.Close() // 使用自定义分隔符创建 bufio.Reader 对象 reader := bufio.NewReader(file) reader.SplitFunc = func(data []byte, atEOF bool) (int, []byte, error) { // 返回自定义分隔符的位置 delimIndex := bytes.IndexByte(data, ';') // 假设分隔符是分号(;) if delimIndex == -1 { // 如果没有找到分隔符,则返回当前行的剩余部分 return len(data), data, nil } // 返回分隔符的位置和分隔符之前的行 return delimIndex + 1, data[:delimIndex], nil } // 逐行读取文件 for { line, _, err := reader.ReadLine() if err == io.EOF { break } else if err != nil { log.Fatal(err) } // 处理每行 fmt.Println(string(line)) } }
Kes Praktikal
Berikut ialah contoh kod yang menggunakan pembatas koma bertitik untuk membaca fail CSV:
package main import ( "bufio" "fmt" "log" "os" ) func main() { // 打开 CSV 文件 file, err := os.Open("customers.csv") if err != nil { log.Fatal(err) } defer file.Close() // 使用分号分隔符创建 bufio.Reader 对象 reader := bufio.NewReader(file) reader.SplitFunc = func(data []byte, atEOF bool) (int, []byte, error) { delimIndex := bytes.IndexByte(data, ';') if delimIndex == -1 { return len(data), data, nil } return delimIndex + 1, data[:delimIndex], nil } // 逐行读取 CSV 文件 for { line, _, err := reader.ReadLine() if err == io.EOF { break } else if err != nil { log.Fatal(err) } // 根据分隔符拆分每一行 parts := bytes.Split(line, []byte(";")) // 处理每一行 fmt.Printf("ID: %s, Name: %s, Email: %s\n", parts[0], parts[1], parts[2]) } }
Atas ialah kandungan terperinci Bagaimana untuk membaca fail dengan pembatas tersuai di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!