如何从读取文件中 return 一个数组?
How to return an array from reading a file?
我在 CSV 文件中有两列。我使用 SearchData()
函数仅访问第一列。
问题是我想以数组形式访问数据,但是当我在 AccessData()
函数中 return 数组字符串并在 [=13] 中写入 products[0]
时=],它只通过删除括号符号 []
给我所有数据,当我写 products[1]
时,它给我 runtime error: index out of range [1] with length 1
.
要求的结果
products[0] = First Item
products[1] = Second Item
...
so on
代码
func AccessData(number int) string {
content, err := ioutil.ReadFile("products/data1.csv")
if err != nil {
log.Fatal(err)
}
Data := string(content)
sliceData := strings.Split(Data, ",")
return sliceData[number]
}
func SearchData(){
for i := 0; i <= 34; i = i + 2 {
products := AccessData(i)
fmt.Println(products)
}
}
这应该可以解决问题:
func firstColumns(filename string) []string {
f, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer f.Close()
r := csv.NewReader(f)
var result []string
for {
row, err := r.Read()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
if len(row) > 0 {
result = append(result, row[0])
}
}
return result
}
func main() {
data := firstColumns("products/data1.csv")
fmt.Println(data)
fmt.Println(data[1])
}
这会将每一行的第一列变成一个[]string
可以访问的索引。
输出为:
[First item Second item]
Second item
我在 CSV 文件中有两列。我使用 SearchData()
函数仅访问第一列。
问题是我想以数组形式访问数据,但是当我在 AccessData()
函数中 return 数组字符串并在 [=13] 中写入 products[0]
时=],它只通过删除括号符号 []
给我所有数据,当我写 products[1]
时,它给我 runtime error: index out of range [1] with length 1
.
要求的结果
products[0] = First Item
products[1] = Second Item
...
so on
代码
func AccessData(number int) string {
content, err := ioutil.ReadFile("products/data1.csv")
if err != nil {
log.Fatal(err)
}
Data := string(content)
sliceData := strings.Split(Data, ",")
return sliceData[number]
}
func SearchData(){
for i := 0; i <= 34; i = i + 2 {
products := AccessData(i)
fmt.Println(products)
}
}
这应该可以解决问题:
func firstColumns(filename string) []string {
f, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer f.Close()
r := csv.NewReader(f)
var result []string
for {
row, err := r.Read()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
if len(row) > 0 {
result = append(result, row[0])
}
}
return result
}
func main() {
data := firstColumns("products/data1.csv")
fmt.Println(data)
fmt.Println(data[1])
}
这会将每一行的第一列变成一个[]string
可以访问的索引。
输出为:
[First item Second item]
Second item