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

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

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

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

Ruby

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

14418閲覧

rubyでcsv出力(SJIS、かつheaderをつけて)するプログラムを書きたいのですが、以下でつまってます・・・。

kento2543

総合スコア163

CSV

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

Ruby

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2015/04/22 12:29

rubyでcsv出力するプログラムを書きたいのですが、詰まってしまいました。

まずやりたいこととしましては、
・ShiftJISで出力するcsvファイルを生成する。
・headerをつける。(title,name,text)
・header以下は、それぞれのheaderに対応した値のデータがどんどん格納されていく。
・MACのExelで閲覧できるようにする。そのためにShiftJISでなくてはいけない。

lang

1 2filepath = "sample.csv" 3header =["title","name","text"] 4 5CSV.open("filepath","a") do |file| 6#CSV.open("filepath","a", :encoding => "SJIS") do |file| 7#csv_data = CSV.generate("filepath", :headers => header, :write_headers => true) do |file| 8#CSV.table("filepath", encoding: "Shift_JIS:UTF-8").each do |file| 9 10 logs.each do |s| 11 ..... 12 .....処理内容(今回は割愛させて頂きます。) 13 file << csv 14 end 15end 16 17

一番上のやり方(コメントアウトしていないプログラム)ではうまくいきますが、
やりたい要件をみたしておりません。
しかし、コメントアウトしているやり方ではエラーが表示されてしまいます。

出力予想例: title,name,text hoge1,kiyo,hello hoge2,yoshi,good hoge3,takeshi,piyo

ネットのソースを参考に色々と試行錯誤したのですが、よくわかりませんでした。
お力をお貸し頂けないでしょうか?

何卒宜しくお願いします。

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

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

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

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

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

guest

回答2

0

こんな感じでしょうか。

lang

1require 'csv' 2 3filepath = "sample.csv" 4header = %w(title name text) 5 6CSV.open(filepath, "a", :encoding => "SJIS") do |file| 7 # ヘッダー出力 8 file << header 9 10 # 各行を出力 11 # logs.each do |s| 12 # ... 13 file << ["hoge1", "kiyo", "hello"] # 実際にはログを元に整形したデータを書き込む 14 # end 15end

投稿2015/04/22 13:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kento2543

2015/04/22 13:17

ご回答有難う御座います。 こちらをもとに再度修正してみます。
guest

0

ベストアンサー

lang

1require "csv" 2FILEPATH = "sample.csv" 3HEADER = ["title","name","text"] 4 5CSV.open(FILEPATH, "a:Windows-31J", :headers => HEADER, :write_headers => true) do |file| 6 7 file << ["あ","い","う"] 8 9end

投稿2015/04/22 13:00

otn

総合スコア84557

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

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

kento2543

2015/04/22 13:16

ご回答有難う御座います。 "a:Windows-31J"というのを使用するんですね。 勉強になります。早速やってみます!
otn

2015/04/22 22:48

日本語Windowsで使われている通称シフトJISは、JIS規格の文字に独自文字をいろいろ追加した物なので、"Shift_JIS"でなく"Windows-31J"を使った方がいいです。 エンコードの指定で使える物は、ruby -e "puts Encoding.list" で表示される物です。"SJIS"はありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問