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

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

ただいまの
回答率

90.61%

  • Ruby

    7319questions

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

  • CSV

    602questions

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

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

受付中

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 8,113

Ryow

score 1

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

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

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

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

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

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

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

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

何卒、皆様のお知恵をおかし頂ければと思います。
よろしくお願い致します。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

0

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

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

__END__
データ1-1    データ1-2    データ1-3    データ1-4    データ1-5
データ2-1    データ2-2    データ2-3    データ2-4    データ2-5
データ3-1    データ3-2    データ3-3    データ3-4    データ3-5

もしくは、joinで要素を改行文字区切りで結合する方法もあります。
puts array.join("\n")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

# 5 個づつデータを取る関数のダミー
def get_array
  yield ["データ 1-1","データ 1-2","データ 1-3","データ 1-4","データ 1-5"]
end

File.open("foo.csv", 'w') {|fp|  
  get_array{|ary|
    ary.each {|el| fp.puts el }
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

array["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"] を1行 1 要素の csv として書き出すには、次のようにすればよいです。
# -*- coding: utf-8 -*-                                                                                                                                
require 'csv'
data = ['データ1-1', 'データ1-2', '"1"', 'A,B', "'a,b'", "改行\nデータ"]

csv_string = CSV.generate do |csv|
  data.each do |d|
    csv << [d]
  end
end
puts csv_string
実行すると次のようになります。
katoy-no-MacBook-Pro:zzz katoy$ ruby csv.rb 
データ1-1
データ1-2
"""1"""
"A,B"
"'a,b'"
"改行
データ"
csv のライブラリーを利用すると、データが ダブルコーテション、シングルコーテーション、 カンマなど csv 出力で考慮すべき事を処理してくれます。

参考:
- Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > csvライブラリ > CSVクラス http://docs.ruby-lang.org/ja/2.1.0/class/CSV.html より引用
# ファイルへ書き込み
CSV.open("path/to/file.csv", "wb") do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
  # ...
end

# 文字列へ書き込み
csv_string = CSV.generate do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
  # ...
end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

目標としておりますのはこの様に書き出されたcsvです。
それはcsvとは呼びません。カンマ出てこないので。

array = ["データ1-1","データ1-2","データ1-3","データ1-4","データ1-5"]
puts array
で、1行1データで書き出せます。


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7319questions

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

  • CSV

    602questions

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