Maison > Article > développement back-end > Comment lire un fichier avec un délimiteur personnalisé dans Golang ?
Lire des fichiers avec des délimiteurs personnalisés dans Golang : utilisez bufio.NewReader pour créer un objet Reader. Configurez la fonction reader.SplitFunc pour renvoyer la position et la ligne du séparateur personnalisé. Lisez le fichier en boucle et traitez-le ligne par ligne.
Comment lire des fichiers avec un délimiteur personnalisé dans Golang
Lors de la lecture de fichiers dans Golang, le délimiteur par défaut est une nouvelle ligne. Cependant, nous devrons parfois utiliser des délimiteurs personnalisés pour lire les fichiers. Cet article explique comment lire des fichiers à l'aide de délimiteurs personnalisés.
Exemple de code
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)) } }
Cas pratique
Ce qui suit est un exemple de code qui utilise le délimiteur point-virgule pour lire un fichier 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]) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!