🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

Ruby

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

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

Q&A

解決済

3回答

8518閲覧

【Ruby】CSVファイル出力時のダブルクォーテーション表示

hidetakamaru

総合スコア32

CSV

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

Ruby

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

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

0グッド

1クリップ

投稿2019/11/01 09:04

編集2019/11/01 09:20

ruby初心者です。
csvファイルを作成して書き込みする処理に関して分からないことがあるため教えて頂きたいです。

問題点

test.csv
企業名,部署名,出荷依頼番号,氏名,年齢
"aaa","bbb","xxx-xxx-xxx","ccc",""

上の内容のcsvファイルを作りたいとき、


test.rb

require 'csv'
number = "123-456-789"

def csv(number)
CSV.open("test.csv", 'w') do |csv|
csv << ["企業名","部署名","出荷依頼番号","氏名","年齢"]
csv << ["aaa","bbb","#{number}","ccc",""]
end
end

csv(number)

これで実行したところ、


test.csv

企業名,部署名,出荷依頼番号,氏名,年齢
aaa,bbb,123-456-789,ccc,""

このような結果でダブルクォーテーションが抜けて出力されてまう。

###試したこと
csv << [""aaa"",""bbb"",""#{number}"",""ccc"",""]

結果=> """aaa""","""bbb""","""123-456-789""","""ccc""",""

また、ヒアドキュメントで丸ごと入れてもだめでした。
何か方法は無いでしょうか?分かる方おられましたら教えてください!

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

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

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

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

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

guest

回答3

0

どうしてもCSV.Openでやりたいなら、2回に分けて書き込むくらいかと。
1回目 : mode=W(書き込み) ヘッダーのみダブルクートなしで出力
2回目 : mode=a(追加書き込み) データをダブルクート付きで出力

投稿2019/11/01 15:11

tatsu99

総合スコア5493

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

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

hidetakamaru

2019/11/01 22:26

丁寧にありがとうございます!! 無事実装できました!!
guest

0

>二行目のみ有効にさせることは可能でしょうか?
ちょっと、強引ですが、以下のような方法でしょうか。
CSV.openに「二行目のみ有効にさせる」オプションはないと思われます。

ruby

1require 'csv' 2 3number = "xxx-xxx-xxx" 4 5def csv(number) 6File.open("test.csv", 'w') do |csv| 7csv << CSV.generate_line(["企業名","部署名","出荷依頼番号","氏名","年齢"]) 8csv << CSV.generate_line(["aaa","bbb","#{number}","ccc",""],:force_quotes =>true) 9end 10end 11 12csv(number) 13

投稿2019/11/01 10:00

tatsu99

総合スコア5493

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

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

0

ベストアンサー

以下のようにしてください。
CSV.open("test.csv", 'w',:force_quotes => true) do |csv|

投稿2019/11/01 09:21

tatsu99

総合スコア5493

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

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

hidetakamaru

2019/11/01 09:27

すばやい回答ありがとうございます!! また、二行目のみ有効にさせることは可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問