[英]Iterate through nested structs in golang and store values in slice of slice string
[英]append slice to csv golang
我試圖創建一個簡單的函數,將切片值附加到創建的csv文件的下一列。 目的是在test.csv中具有這種樣式
|列A |列B |
| header1 | header2 |
| FIRSTVALUE | SECONDVALUE |
(很抱歉,格式錯誤,但是一旦生成了text.csv,如果我們打開text.csv文件,我們的想法是將“ SECONDVALUE”放在“ FIRSTVALUE”之后的下一列中(如並在每次調用該函數時,都將在下一行的前一列之后追加下一個值)。
這就是我得到的結果,但是它直接將SECONDVALUE附加到FIRSTVALUE的同一列上。(所以不是得到“ | FIRSTVALUE | SECONDVALUE”而是得到“ | FIRSTVALUESECONDVALUE |”)
package main
import (
"encoding/csv"
"fmt"
"os"
"strings"
)
func main() {
callfunc()
}
func callfunc() int {
testval1 := []string{"FIRST VALUE"}
test(testval1, "test.csv", 1)
testval2 := []string{"SECOND VALUE"}
test(testval2, "test.csv", 0) //I want this to be added to the column next to first value
return 1
}
func test(lines []string, path string, header int) {
var hdr = []string{"header1", "header2"}
fmt.Println("inside the method..\n")
file, err := os.OpenFile(path, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
if file, err = os.Create(path); err != nil {
return
}
}
defer file.Close()
writer := csv.NewWriter(file)
if header == 1 {
returnError := writer.Write(hdr)
if returnError != nil {
fmt.Println(returnError)
}
}
writer.Flush()
for _, value := range lines {
_, err := file.WriteString(strings.TrimSpace(value))
if err != nil { //exception handler
fmt.Println(err)
break
}
}
writer.Flush()
}
如何修復上面的代碼行,以使“ SECONDVALUE”是第二列,而不是在“ FIRSTVALUE”所在的列中。
您的代碼包含我無法清楚理解的內容,因此這是一個微型程序,可以滿足您的要求。 您可以在此基礎上構建。
package main
import (
"encoding/csv"
"os"
)
func addcol(fname string, column []string) error {
// read the file
f, err := os.Open(fname)
if err != nil {
return err
}
r := csv.NewReader(f)
lines, err := r.ReadAll()
if err != nil {
return err
}
if err = f.Close(); err != nil {
return err
}
// add column
l := len(lines)
if len(column) < l {
l = len(column)
}
for i := 0; i < l; i++ {
lines[i] = append(lines[i], column[i])
}
// write the file
f, err = os.Create(fname)
if err != nil {
return err
}
w := csv.NewWriter(f)
if err = w.WriteAll(lines); err != nil {
f.Close()
return err
}
return f.Close()
}
func main() {
col := []string{"column two", "a", "b", "c", "d"}
if err := addcol("in.csv", col); err != nil {
panic(err)
}
}
func addcol(fname string, column []string) {
// read the file
f, err := os.OpenFile(fname, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
fmt.Println("Error: ", err)
return
}
w := csv.NewWriter(f)
w.Write(column)
w.Flush()
}
從https://www.reddit.com/r/golang/comments/46fdef/help_appending_a_slice_to_next_row_in_csv_file/復制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.