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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1668閲覧

rubyでcsvに書き込むとarray型がstringに変換されてしまう問題

big2017

総合スコア39

CSV

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/09/27 03:11

rubyの配列をcsvに保存したいと思っております。

しかし、csvに変換した時に余計な「""」がarrayの要素についてしまいstring型として扱われてしまい困っております。
array型のままにするか、もしくはstringからarray型に変換する方法はないのでしょうか?(複雑そうですが.....)

csvに書き込む前の配列

→ [["中山", "4回中山7日目 3歳上 ", "20171001(日)", "12R", "3歳上500万下", "1200", "ダ", "16:25", [["1", # ここからは配列としてcsvに取り込ませたい 1, "タイガーヴォーグ", "牡4", "57.0", "勝浦",], ["8", 16, "スズカグラーテ", "牝3", "53.0", "長岡"]] ]]

csvにとり込み後

中山,4回中山7日目 3歳上 ,20170923(土),12R,3歳上500万下,1200,ダ,16:25,"[[""1"", 1, ""タイガーヴォーグ"", ""牡4"", ""57.0"", ""勝浦""],[""8"", 16, ""スズカグラーテ"", ""牝3"", ""53.0"", ""長岡""]]"

となります。 配列として取り込ませたいところに ""が勝手についてしまうためstringとして保存されてしまいます。また配列の中の要素全てに「""〇〇""」というように連続してダブルコーテーションがつくのも違和感です。

csvは配列型でデータを保持することができないのでしょうか...?

該当コード

ruby

1 2def self.this_race_info_to_csv 3 4 this_race_info = [["中山", 5 "4回中山7日目 3歳上 ", 6 "20171001(日)", 7 "12R", 8 "3歳上500万下", 9 "1200", 10 "ダ", 11 "16:25", 12 [["1", # ここからは配列としてcsvに取り込ませたい 13 1, 14 "タイガーヴォーグ", 15 "牡4", 16 "57.0", 17 "勝浦",], 18 ["8", 19 16, 20 "スズカグラーテ", 21 "牝3", 22 "53.0", 23 "長岡"]] 24 ]] 25 26 header = ["競馬場", "開催情報", "日付", "レースの順番", "レース名", "距離", "芝かダート", "出走時刻", "出走馬情報"] 27 CSV.open("this_race_info.csv", "wb", :headers => header, :write_headers => true) do |csv| 28 this_race_info.each do |r| 29 binding.pry 30 csv << r 31 end 32 end 33 end

の結果が上でも示しましたが、

中山,4回中山7日目 3歳上 ,20170923(土),12R,3歳上500万下,1200,ダ,16:25,"[[""1"", 1, ""タイガーヴォーグ"", ""牡4"", ""57.0"", ""勝浦""],[""8"", 16, ""スズカグラーテ"", ""牝3"", ""53.0"", ""長岡""]]"

となってしまいます...

理想は

中山,4回中山7日目 3歳上 ,20170923(土),12R,3歳上500万下,1200,ダ,16:25,[["1", 1, "タイガーヴォーグ", "牡4", "57.0", "勝浦"],["8", 16, "スズカグラーテ", "牝3", "53.0", "長岡"]]

のようにできたら嬉しいです。

大変お手数おかけしますが、何かヒントなどいただけましたらとても嬉しいです。何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

正当なCSVの定義がそうなっているから、そうなるってやつですかね。
””が含むものは、””で囲まないとだめ、
,が含まれるものは、””で囲まないとだめ、というCSVのルール

JSONで保存すれば楽ちん解決じゃないですかね?

投稿2017/09/27 03:24

編集2017/09/27 03:37
kiichi54321

総合スコア1984

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

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

big2017

2017/09/27 04:12

回答ありがとうございます! なるほどです。理由がわかってよかったです。 jsonに関して調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問