QA@IT

Rubyでスクレイピングした配列を上手くCSVに保存できない。

5135 PV

宜しくお願いします。
長く分かりにくいので、ちょっと省いて説明します。
ブロックのcompanyから1つずつ(company_nameとmail_addres)を取得し、
配列にpushしつつ、最後にcsvファイルを生成したいのですが、
結果は


会社名,メールアドレス
"["" company_name""]"
[nil]


と末尾の要素しか取得できていません。ブロック内の要素を一つずつpushしているつもりなのですが、、、
もし分かりにくいようでしたら、全てのソースコードお見せします、、

/[\w\d_-]+@[\w\d_-]+.[\w\d._-]+/はメールアドレスの正規表現です。

   @company_name = []
   @mail_address = []

A.each do |company|
  @company_name.push(company.text)
  @mail_address.push(company.scan(/[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+/))
end
CSV.open("XXX.csv","w") do |csv|
    csv << [@company_name]
    csv << [@mail_address]
end

回答

1行ずつ入れればいいのでは。

CSV.open("XXX.csv","w") do |csv|
  @company_name.length.time do |i|
    csv << [@company_name[i], @mail_address[i]]
  end
end

http://docs.ruby-lang.org/ja/2.1.0/class/CSV.html

編集 履歴 (0)
  • 何故timeが??と思ったら、times のタイプミスですね。
    @company_neme.each_index の方が良いと思います。
    -

お書きの部分にはおかしいところはありません。書かれていない部分に間違いがあると思われます。
ただ、[ ] で囲って出力しているので、項目毎のCSVにはなってませんが、それでいいのでしょうか?

編集 履歴 (0)
  • ご回答ありがとうございます。
    そうですね、多分他にも原因が、、、
    ちなみに
    [ ] で囲って出力しているので、項目毎のCSV
    >>これは最後をcsv << @company_nameにする解釈で宜しいですよね?

    あと
    【現在】
    1 会社名,メールアドレス
    2 XXX会社,xxx@xxx.ne.jp, aaa会社,aaa@aaa.ne.jp,bbb会社,bbb@bbb.ne.jp
    -
  • という状態なのですが、理想は
    1 会社名,メールアドレス
    2 XXX会社,xxx@xxx.ne.jp
    3aaa会社,aaa@aaa.ne.jp
    4bbb会社,bbb@bbb.ne.jp
    というしたいです、、、となると書き方自体が違いますよね、、むー
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。