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

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

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

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

Ruby

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

Q&A

4回答

13675閲覧

rubyで配列をcsvに格納する際、1要素ごとに改行する方法

Ryow

総合スコア6

CSV

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

Ruby

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

0グッド

0クリップ

投稿2014/09/15 02:45

かなり初歩的な質問で申し訳有りません。
質問させて頂きます。

現在、スクレイピングしたデータをcsvに書き出すプログラムを作成しております。
データは5個づつ取得され、そのデータが5個の要素として配列に格納されます。

lang

1array["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"]

この配列をcsvに書き出し、配列をクリアし、また新たに5個のデータを取得しcsvに追記する
という繰り返しのプログラムになっております。

この5個の要素を書き出す際、現在は5要素1行として書き出されており、
csvには以下の様になっております。

![イメージ説明]WIDTH:430

これを要素ごとに改行された状態で書き出したいと思っております。

目標としておりますのはこの様に書き出されたcsvです。

![イメージ説明]WIDTH:244

いろいろ調べて試しましたが、
スマートに出来る方法が見つけられず困っております。

何卒、皆様のお知恵をおかし頂ければと思います。
よろしくお願い致します。

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

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

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

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

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

guest

回答4

0

array["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"] を1行 1 要素の csv として書き出すには、次のようにすればよいです。

lang

1# -*- coding: utf-8 -*- 2require 'csv' 3data = ['データ1-1', 'データ1-2', '"1"', 'A,B', "'a,b'", "改行\nデータ"] 4 5csv_string = CSV.generate do |csv| 6 data.each do |d| 7 csv << [d] 8 end 9end 10puts csv_string

実行すると次のようになります。

katoy-no-MacBook-Pro:zzz katoy$ ruby csv.rb データ1-1 データ1-2 """1""" "A,B" "'a,b'" "改行 データ"

csv のライブラリーを利用すると、データが ダブルコーテション、シングルコーテーション、 カンマなど csv 出力で考慮すべき事を処理してくれます。

参考:

lang

1# ファイルへ書き込み 2CSV.open("path/to/file.csv", "wb") do |csv| 3 csv << ["row", "of", "CSV", "data"] 4 csv << ["another", "row"] 5 # ... 6end 7 8# 文字列へ書き込み 9csv_string = CSV.generate do |csv| 10 csv << ["row", "of", "CSV", "data"] 11 csv << ["another", "row"] 12 # ... 13end

投稿2014/10/12 01:39

katoy

総合スコア22324

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

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

0

目標としておりますのはこの様に書き出されたcsvです。

それはcsvとは呼びません。カンマ出てこないので。

lang

1array = ["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"] 2puts array

で、1行1データで書き出せます。

投稿2014/09/15 15:04

otn

総合スコア85942

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

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

0

データを 5 個とってくる処理にもよりますが、配列にとった後、 each で一要素ずつ書き込めばいいんじゃないかと思います。

lang

1# 5 個づつデータを取る関数のダミー 2def get_array 3 yield ["データ 1-1","データ 1-2","データ 1-3","データ 1-4","データ 1-5"] 4end 5 6File.open("foo.csv", 'w') {|fp| 7 get_array{|ary| 8 ary.each {|el| fp.puts el } 9 } 10}

投稿2014/09/15 14:25

yohshiy

総合スコア863

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

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

0

配列の要素をeachでひとつずつputsで出力すれば1要素ごとに改行されます。

lang

1DATA.readlines.each do |line| 2 array = line.split("\t") # array["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"] 3 array.each do |i| 4 puts i 5 end 6end 7 8__END__ 9データ1-1 データ1-2 データ1-3 データ1-4 データ1-5 10データ2-1 データ2-2 データ2-3 データ2-4 データ2-5 11データ3-1 データ3-2 データ3-3 データ3-4 データ3-5

もしくは、joinで要素を改行文字区切りで結合する方法もあります。

lang

1puts array.join("\n")

投稿2014/09/15 05:04

argius

総合スコア9394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問