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

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

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

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

Q&A

解決済

3回答

1391閲覧

ruby CSVファイルの読み込み 初めの2行のみ

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2018/08/24 10:04

rubyでcsvファイルを読み込むさいに、ヘッターを含む最初の2行のみを読みこみ、他は読み込まないことはできますでしょうか。

csvファイルの行数が多く、.readや**.foreach**だと全行数を読み込んでしまうので処理に時間がかかります。

具体的には、次のようなCSVデータで行数が20000行程ありますが、
2行目の ”1,20180821,100,35” のみを出力したいので、3行目以降は読み込む必要がありません。

No,Time,kakaku,kosuu
1,20180821,100,35
2,20180822,300,11
3,20180823,150,16
4,20180824,200,13


20000,20191231,170,18

調べると**.map**を使えばなんとかなりそうな気もしたのですが、いまいちわかりませんでした。
サンプルコードなどを教えて頂けると助かります。

宜しくお願い致します。

(1行目と2行目のみの別のファイルを作っておき、それを読み込むなどは管理上できません。)

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

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

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

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

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

guest

回答3

0

CSVライブラリは、CSV.parse_lineを使うと1行分の文字列をCSVとしてparseできます。

また、:headersでCSVのヘッダ行に該当するArrayを渡すと、ヘッダをキーとしたHashに似た使い方ができます。

サンプルのCSVをfoo.csvというファイル名とすると、以下のようになります。

ruby

1require 'csv' 2 3csv_filename = "foo.csv" 4File.open(csv_filename) do |f| 5 line1 = f.gets 6 line2 = f.gets 7 header = CSV.parse_line(line1) 8 csv_body = CSV.parse_line(line2, headers: header) 9 p csv_body["kosuu"] #=> 35 10end

投稿2018/08/24 12:29

takahashim

総合スコア1877

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

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

退会済みユーザー

退会済みユーザー

2018/08/24 14:14

ありがとうございます!
guest

0

ベストアンサー

Ruby

1require "csv" 2 3CSV.open("file.csv") do |csvfile| 4 title = csvfile.gets 5 data = csvfile.gets 6 p title 7 p data 8end

2行目の ”1,20180821,100,35” のみを出力したいので

CSVデータとしてではなく文字列として出力するなら、

Ruby

1open("file.csv") do |file| 2 title = file.gets 3 data = file.gets 4 puts title 5 puts data 6end

投稿2018/08/24 11:39

otn

総合スコア84423

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

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

退会済みユーザー

退会済みユーザー

2018/08/24 14:13

いつもありがとうございます!上手くできました!
guest

0

ruby

1require 'csv' 2 3row2 = nil 4row = CSV.foreach('data.csv', headers:true) do |row| 5 row2 = row 6 break 7end 8 9p row2

実行例
イメージ説明

投稿2018/08/24 21:13

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問