Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membaca fail dengan pembatas tersuai di Golang?

Bagaimana untuk membaca fail dengan pembatas tersuai di Golang?

WBOY
WBOYasal
2024-06-05 15:22:41747semak imbas

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.

如何在 Golang 中使用自定义分隔符读取文件?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn