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

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

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

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

Q&A

解決済

2回答

2957閲覧

rubyのcsvの読み込みについて

hogehoge333

総合スコア13

Ruby

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

0グッド

0クリップ

投稿2016/03/23 17:32

rubyのcsvの読み込みについてご質問があります。

###実現したい事

csvの特定の行を読み込みたい

###エラー内容

読み込み出来るのですが、行ではなく列を読み込んでしまいます。

CSVの内容
sample.csv

"鈴木","埼玉県",26 "山田","東京都",34 "加藤","千葉県",47

↑このCSVの1行目 ["山田","東京都",34] を読み込みたいと考えています。

読み込み

ruby

1require 'csv' 2 3CSV.foreach("sample.csv") do |row| 4 p row[1] 5end 6

↑の結果

"埼玉県" "東京都" "千葉県"

となります。

ruby

1require 'csv' 2 3CSV.foreach("sample.csv") do |row| 4 p row 5end 6

↑の結果だと

["鈴木", "埼玉県", "26"] ["山田", "東京都", "34"] ["加藤", "千葉県", "47"]

となりますので row[1]の指定で["山田", "東京都", "34"]を取得出来ると考えたのですが。。。

良い方法御座いましたら教えて頂けると幸いです。

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

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

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

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

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

guest

回答2

0

ruby

1CSV.foreach("sample.csv") do |row| 2 p row 3end

を実行すると

["鈴木", "埼玉県", "26"] ["山田", "東京都", "34"] ["加藤", "千葉県", "47"]

となります。
csv ファイル各行が row に設定されてループが回るのです。
ループ中で行数を数えるようにして、必要な行の場合だけ、 p row するようにすれば良いかもしれません。

に幾つか csv の読み方の例がでています。

csv ファイルが小さいなら, ↑のなかの例の1つの

ファイルから一度に

arr = CSV.read("path/to/file.csv")

としてから

p arr[1]

とすれば、 ["山田","東京都",34] が得られます。
この場合には、arr には csv 全体が入っているからです。

投稿2016/03/23 21:23

katoy

総合スコア22324

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

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

hogehoge333

2016/03/23 21:33

ご回答有難う御座います。 URLも有難う御座います。 ご回答頂いた方法が望んでいた事になります。 投稿する前に色々と確認したのですが、foreachはファイルから一行ずつ代入される = 1行ずつがブロックとなり => arr[1] で1行づつ取り出せると勘違いをしておりました。。。お恥ずかしい。 頂いた方法理解することが出来ました。 この度は誠に有難う御座いました。
guest

0

ベストアンサー

何をされたいのかが今ひとつ理解できないのですが、foreach でループを回すということは入力ファイル全体を処理したいのですよね?

Ruby

1require 'csv' 2 3CSV.foreach("sample.csv") do |row| ← ループを1週する毎に「row」に1行取り込まれる 4 p row[1] ← 各行の1番目の要素(1列目)を出力する 5end

という意味なので、当然の結果だと思うのですが。
もし row[1] に1行目を格納したいということであれば、下記のようにすれば良いのではないかと思いますが、入力ファイル(sample.csv)が巨大なのに1行目だけが欲しいのであれば無駄ですよね…

Ruby

1require 'csv' 2 3row = CSV.read("sample.csv") 4p row 5p row[1]

実行結果は下記の通りです。

p row # [["鈴木", "埼玉県", "26"], ["山田", "東京都", "34"], ["加藤", "千葉県", "47"]] p row[1] # ["山田", "東京都", "34"]

投稿2016/03/23 21:03

pi-chan

総合スコア5936

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

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

hogehoge333

2016/03/23 21:15

ご回答有難う御座います。 またご質問の内容が悪く混乱させてしまい申し訳御座いません。 ご回答頂いた方法が望んでいた方法になります。 頂いた回答の詳細を確認し、理解出来ました。(私が何か変な方向で考えておりました。。。お恥ずかしい。。。) この度は誠に有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問