从CSV文件中加载矩阵 – Golang

huangapple go评论107阅读模式
英文:

Loading matrix in from csv file - golang

问题

我正在编写一个对矩阵进行数学运算的程序。我想从一个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)
}

writer.Flush()

这会产生以下错误:

cannot use line2 (type int) as type []string in argument to writer.Write

根据评论中的建议进行了更新,但仍然出现上述错误。

英文:

I'm writing a program that performs math on matrixes. I want to load them in from a csv file and have the following code:

	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
	}
}

However the strconv code is throwing an error:

strconv.ParseInt: parsing "": invalid syntax

It appears that everything else in the code is correct, does anyone have any ideas on how to solve this error?

EDIT: I'm now trying to work on outputting my result to a new csv file.

I have the following code:

	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)
}
	
}

}

This gives the following error:

 cannot use line2 (type int) as type []string in argument to writer.Write

Updated with the suggestions from comments however the above error is now seen.

答案1

得分: 2

这意味着你的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
		}
	}
}

以上是翻译好的内容,请确认是否满意。

英文:

This means one of the cells of your CSV is blank, I reproduced the error with this code:

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
		}
	}
}

If you are ok with treating blank cells as 0 this will get you past the error:

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
		}
	}
}

答案2

得分: 0

根据上面的评论提到,错误是由于我的CSV文件中缺少一个值造成的。

一旦文件被修正,错误就消失了。

英文:

As mentions in the comments above the error was due to a missing value in my csv file.

Once the file was amended the error is now gone.

huangapple
  • 本文由 发表于 2017年5月30日 05:18:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/44250414.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定