如何在Go中使用字符串分隔符将数据写入CSV文件

u4vypkhs  于 2023-07-31  发布在  Go
关注(0)|答案(1)|浏览(120)

我使用“encoding/csv”处理csv输出
我如何将数据写入CSV文件与字符串分隔符一样“|-|“
csv。Writer只能使用单个字符作为分隔符,因为Writer。逗号定义为int 32,不支持字符串分隔符

pbpqsu0x

pbpqsu0x1#

用于使用'|-|'作为分隔符,您必须编写自己的自定义写函数。我尝试了下面的代码,得到了这样的输出:

  • 包main
import (
    "encoding/csv"
    "fmt"
    "os"
    "strings"
)

type CustomCSVWriter struct {
    Writer    *csv.Writer
    Delimiter string
}

func NewCustomCSVWriter(w *csv.Writer, delimiter string) *CustomCSVWriter {
    return &CustomCSVWriter{
        Writer:    w,
        Delimiter: delimiter,
    }
}

func (c *CustomCSVWriter) Write(record []string) error {
    // Join the fields using the custom delimiter
    joinedRecord := strings.Join(record, c.Delimiter)

    // Write the joined record to the CSV writer
    return c.Writer.Write([]string{joinedRecord})
}

func main() {
    file, err := os.Create("output.csv")
    if err != nil {
        fmt.Println("Error creating file:", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)

    // Set the custom delimiter
    customDelimiter := "|-|"
    customWriter := NewCustomCSVWriter(writer, customDelimiter)

    data := [][]string{
        {"Alice", "25", "New York"},
        {"Bob", "30", "San Francisco"},
        {"Charlie", "28", "Chicago"},
    }

    for _, record := range data {
        if err := customWriter.Write(record); err != nil {
            fmt.Println("Error writing record:", err)
            return
        }
    }

    customWriter.Writer.Flush()

    if err := customWriter.Writer.Error(); err != nil {
        fmt.Println("Error flushing CSV writer:", err)
        return
    }

    fmt.Println("CSV data written to output.csv")
}*

字符串
我希望这就是你想要的。

Alice|-|25|-|New York
Bob|-|30|-|San Francisco
Charlie|-|28|-|Chicago

相关问题