前提・実現したいこと
golangにてcsvを加工。
csvに値(文字列)を入れてい来ます。
その文字列がcsv内にない値であれば、追加。
既に値があるものに関しては、右側に数を足してい来たいです。
現状としては、csvの要素は取れて加工はできているものの、
csvにどのように特定の値を上書きをすればいいかわかりません。
該当のソースコード
golang
1package svc 2 3import ( 4 "encoding/csv" 5 "fmt" 6 "io" 7 "log" 8 "os" 9 "strconv" 10 "strings" 11 "testing" 12) 13 14//以下の値は"sample_4"にもなったりします。不定です。 15var samples = []string{ 16 "sample", 17 "sample_2", 18 "sample_3", 19} 20 21func TestPath(t *testing.T) { 22 // なければcsv作成 23 if _, err := os.Stat("sam.csv"); err != nil { 24 for _, v := range samples { 25 if err := write(v); err != nil { 26 return 27 } 28 29 } 30 } else { 31 fp, err := os.Open("sam.csv") 32 if err != nil { 33 os.OpenFile("sam.csv", os.O_WRONLY|os.O_CREATE, 0600) 34 } 35 defer fp.Close() 36 reader := csv.NewReader(fp) 37 reader.Comma = '\t' 38 reader.LazyQuotes = true 39 for { 40 csvText, err := reader.Read() 41 if err != nil { 42 log.Println(err) 43 } 44 if err == io.EOF { 45 return 46 } 47 splitCsv := strings.Split(csvText[0], ",") 48 errFile := splitCsv[0] 49 tmpErrCount := splitCsv[1] 50 errCount, _ := strconv.Atoi(tmpErrCount) 51 for _, v := range samples { 52 if errFile == v { 53 errCount = errCount + 1 54 errNum := strconv.Itoa(errCount) 55 csvAdd := []string{errFile, errNum} 56 fmt.Println(csvAdd) 57 } 58 } 59 60 } 61 62 } 63} 64 65 66func write(sample string) error { 67 test := []string{sample, "1"} 68 file, err := os.OpenFile("sam.csv", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0600) 69 defer file.Close() 70 if err != nil { 71 return err 72 } 73 defer file.Close() 74 writer := csv.NewWriter(file) // utf8 75 writer.Write(test) 76 writer.Flush() 77 return nil 78} 79
###出力結果
これらの値をcsvに上書きしたいです。
他の要素も入ってくるので、新しく作り直すのはできません。
[sample 2] [sample_2 2] [sample_3 2] [sample_4 1] ..........など
お手数ですが、よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/31 12:38