我正在编写一个对矩阵执行数学运算的程序。我想从csv文件加载它们并具有以下代码:
file, err := os.Open("matrix1.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
lines, _ := csv.NewReader(file).ReadAll()
for i, line := range lines {
for j, val := range line {
valInt, err := strconv.Atoi(val)
if err != nil {
log.Fatal(err)
}
matrix1[i][j] = valInt
}
}
然而,strconv代码抛出错误:
strconv.ParseInt: parsing "": invalid syntax
似乎代码中的其他所有内容都是正确的,有没有人对如何解决此错误有任何想法?
编辑:我现在正在尝试将结果输出到新的csv文件。
我有以下代码:
file2, err := os.Create("result.csv")
if err != nil {
log.Fatal(err)
}
defer file1.Close()
writer := csv.NewWriter(file2)
for line2 := range blank {
writer.Write(line2)
}
}
}
这会出现以下错误:
cannot use line2 (type int) as type []string in argument to writer.Write
更新了评论中的建议,但现在可以看到上述错误。
答案 0 :(得分:1)
这意味着您的CSV的一个单元格为空白,我使用以下代码重现了错误:
package main
import (
"encoding/csv"
"log"
"strconv"
"strings"
)
func main() {
matrix1 := [5][5]int{}
file := strings.NewReader("1,2,3,4,5\n6,7,8,,0")
lines, _ := csv.NewReader(file).ReadAll()
for i, line := range lines {
for j, val := range line {
valInt, err := strconv.Atoi(val)
if err != nil {
log.Fatal(err)
}
matrix1[i][j] = valInt
}
}
}
如果您可以将空白单元格视为0,那么这将使您超越错误:
func main() {
matrix1 := [5][5]int{}
file := strings.NewReader("1,2,3,4,5\n6,7,8,,0")
lines, _ := csv.NewReader(file).ReadAll()
for i, line := range lines {
for j, val := range line {
var valInt int
var err error
if val == "" {
valInt = 0
} else {
valInt, err = strconv.Atoi(val)
}
if err != nil {
log.Fatal(err)
}
matrix1[i][j] = valInt
}
}
}
答案 1 :(得分:0)
正如上面评论中提到的,错误是由于我的csv文件中缺少值。
修改文件后,错误现在消失了。