我正在编写一个对矩阵执行数学运算的程序。我想从 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
根据评论中的建议进行了更新,但现在出现了上述错误。
最佳答案
这意味着您的 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
}
}
}
关于arrays - 从 csv 文件加载矩阵 - golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250414/