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

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

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

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

Go

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

Q&A

解決済

1回答

2457閲覧

goでcsv書き込みの際にfloatで書き込みをしたい

applepine1125

総合スコア14

CSV

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

Go

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

0グッド

0クリップ

投稿2016/11/07 14:58

go言語を用いてcsvの書き込みを試みようとしているのですが,
事情によりstringではなくfloatでの書き込みを求めています.
csvパッケージにwhite関数があるのですが引数がstringのスライスでなければならず,書き込んだcsvの中身もstringになります.

何かよい方法はないでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

go

1records := [][]string{ 2 {"Sato", "Takesi", fmt.Sprintf("%0.4f", 1.1)}, 3 {"Tanaka", "Taro", fmt.Sprintf("%0.4f", 111.2)}, 4}

数値も出力するときは文字列ですから、変換する他ないかと思われます。
fmt.Sprintf()関数は、printfのように文字列をフォーマットできます。

また文字列を読み取ったらそれを構造体に移す処理などがあるとfloat型に戻しやすいと思います。

go

1type Data struct{ 2 sei string 3 mei string 4 point float64 5} 6//...省略 7records, err := r.ReadAll() 8pdata := make([]Data, len(records)) 9for n, v := range records{ 10 pdata[n].sei = v[0] 11 pdata[n].mei = v[1] 12 pdata[n].point, _ = strconv.ParseFloat(v[2], 64) 13} 14

データの個数や型が不明な場合はこの方法ではできません。

interface{}型を使うことでもっと抽象的に扱えます。
すべてinterface{}型に格納して、ParseFloatが成功したらなfloat型にして格納
ParseFloatが失敗したならstring型として格納
みたいなことができます。
switch文で型判定をするという特殊なことをしますが、それさえできれば応用の利くプログラムになりそうです。

投稿2016/11/10 15:29

編集2016/11/11 00:21
intelf___

総合スコア868

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

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

applepine1125

2016/11/15 02:16

詳細な回答ありがとうございます!
intelf___

2016/11/15 04:42

strconv.ParseFloat()はデータにエラーがあると0.0が返ってくるので気をつけてくださいね pointを*float64型にして、 ```go val, err := strconv.ParseFloat(v[2], 64) if err != nil{ pdata[n].point = nil }else{ pdata[n].point = &val } ``` pointへの代入をこのようにすると、データが正しくなかったときにnilを代入できます。 pointのデータの取り出し方はこうです。 fmt.Println(*pdata[0].point) point==nilの場合はエラーハンドリングのように処理しましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問