有人知道如何根据其列从作为 multipart.file 上传的 CSV 文件中提取数据,然后将数据输入到另一个 CSV 文件(模板)中吗?
我仍然无法在 golang 中找到正确的逻辑来做到这一点。这是 csv 文件,看起来很像:
“公司”,,, 地址 :,,, 林荫大道,,, 服务/办公室 : 021-62318113 / 021-22684901,,, “VGA 有保证”,经销商,建议零售价,保证金 VGA-1,"37,000","38,000","1,000" VGA-2,"27,500","28,500","1,000" 案例、经销商、建议零售价、利润 CASE-1 ,"430,000","480,000","50,000" CASE-2 ,"450,000","500,000","50,000" “铭瑄VGA”,经销商,建议零售价,利润 MVGA-1,"13,300,000","13,800,000","500,000"
这些是我尝试读取的用于检测表头的代码(至少具有“Msrp”列的行):
reader := csv.NewReader(f)
records, err := reader.Read()
var rows []string
columns := []string{"Msrp", "MSRP", "msrp"}
for _, column := range columns {
for _, columnName := range records {
for _, cols := range columnName {
if cols == column {
row := strings.Join(columnName, " ")
rows = append(rows, row)
break
}
}
}
但它只返回表头。我需要获取每一列的值并将其保存到一个新切片中(也许?),以便稍后我可以使用我刚刚从上传的 CSV 文件中提取的值来更新 CSV 模板文件
有没有更好的方法来解决这个问题? 无论如何,我是 golang 和编程新手,请帮助我
非常感谢!
看起来对于
reader := csv.NewReader(f)
的返回可能存在一些混乱。
reader
代表整个表格。
如果循环遍历 reader
,则可以逐行打印。
这样写个测试,打印出数据,你就会有一个清晰的认识了。
reader := csv.NewReader(file)
//the first line data is the titles
titles, _ = reader.Read()
// perform a data comparison with columns := []string{"Msrp", "MSRP", "msrp"}
// allocate a container below to store it
//loop the row
for {
records, _ = reader.Read() // the records
// the records is a var record []string
// you should loop that value
//there record[1], record[2], record[3] is your col
}
希望这可以帮助你