登录
首页 >  Golang >  Go问答

将在 Golang 中以CSV形式保留字符串的前导零

来源:stackoverflow

时间:2024-03-05 15:39:25 212浏览 收藏

大家好,我们又见面了啊~本文《将在 Golang 中以CSV形式保留字符串的前导零》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个使用 gin 框架的 go 应用程序,它将结构导出为 csv。一列 usercode 要求导出字段保留字符串的所有前导零。

例如,对于 000001010101000000 等字符串,csv 中导出的字段应具有完全相同的值。但是,如果我直接将字符串附加到行并写入缓冲区,导出的字段将发出所有前导零,并且值变为: 110101 ,我做了一些挖掘,似乎可以解决这个问题通过在读取csv文件时在excel中设置列类型,但我想知道这是否可以在go程序中解决?谢谢!

我的csv导出相关功能:

func (h *HandleManager) ExportUsers() gin.HandlerFunc {

        var buf bytes.Buffer
        writer := csv.NewWriter(&buf)
        var cols = []string{"User Name", ..., ....}
        writer.Write(cols)
        for _, e := range users {
            var row []string
            // ....
            row = append(row, e.userCode) // type: string
            if err := writer.Write(row); err != nil {
                log.Errorff(h.logCtx, "ExportUsers|WriteToCSV|err:%v", err)
                c.AbortWithStatus(http.StatusInternalServerError)
                return
            }
        }
        writer.Flush()
        c.Writer.Header().Set("Content-Type", "text/csv")
        c.Writer.Header().Set("Content-Disposition", "attachment;filename="+csvFileName+".csv")
        c.Writer.Write(buf.Bytes())
}

正确答案


经过几次尝试,我找到了在 golang 中有效的解决方案,感谢@steffen ullrich 提出的链接。与 vb 中的工作类似,两边不用两个引号,一个就足够了:

row = append(row, "=\""+e. usercode +"\"")

将包含 csv 文件中的所有前导零:

000001, 010101, 000000
  1. 我测试了你的代码,excel 中的结果会丢失零,但 txt 阅读器中不会;

  2. 代码:

    函数主() { 类型用户结构体{ 名称字符串 代码串 }

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
         var buf bytes.Buffer
         writer := csv.NewWriter(&buf)
         var cols = []string{"Name", "Code"}
         writer.Write(cols)
         users := []user{{Name: "Tome", Code: "001"}, {Name: "James", Code: "000"}}
    
         for _, e := range users {
             err := writer.Write([]string{e.Name, e.Code})
             if err != nil {
                 log.Fatalln(err)
             }
         }
         writer.Flush()
         w.Header().Set("Content-Type", "text/csv")
         w.Header().Set("Content-Disposition", "attachment;filename="+"test.csv")
    
         w.Write(buf.Bytes())
    
     })
    
     http.ListenAndServe(":8080", nil)

    }

结果:

今天关于《将在 Golang 中以CSV形式保留字符串的前导零》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>