質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

695閲覧

golang csv 上書き 特定の要素上書き

horusu

総合スコア14

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2018/10/29 13:57

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずは
mapの構造でやりたい処理⑵を実装しましょう。
次にCSVからmapを構築する処理⑴、
mapからCSVを出力する処理⑶を実装します。

文字列を処理する際、⑴,⑵,⑶を実行する。
これでできるはずです。
もちろん⑴と⑶の間であれば⑵を複数回実行するというやり方も有効です。

投稿2018/10/29 22:00

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horusu

2018/10/31 12:38

遅くなりました! 意図通りに実装できました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問