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

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

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

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

Q&A

解決済

2回答

967閲覧

CSVファイルのうち、一定値以上の行のみを抽出して別名でCSVファイルとして保存

m8aFm77kKU9JuID

総合スコア78

Ruby

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

0グッド

0クリップ

投稿2018/04/25 04:09

前提・実現したいこと

155MB程度のCSVファイルのうち、一定値以上の行のみを抽出して別名でCSVファイルとして
出力したいです。CSVファイルは、「MACアドレス,MACアドレス2,開始年月日,終了年月日,秒,MACアドレス3」で構成
されており、秒が100以上の行のみを出力して、別名でCSVとして出力させ保存したいです。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

**********.rb:4:in >=': comparison of String with 100 failed (ArgumentError) from pbl-data2.rb:4:in block in <main>'
from /Users//.rbenv/versions/2.3.0/lib/ruby/2.3.0/csv.rb:1748:in each' from /Users/*****/.rbenv/versions/2.3.0/lib/ruby/2.3.0/csv.rb:1131:in block in foreach'
from /Users/
/.rbenv/versions/2.3.0/lib/ruby/2.3.0/csv.rb:1282:in open' from /Users/*****/.rbenv/versions/2.3.0/lib/ruby/2.3.0/csv.rb:1130:in foreach'
from *****.rb:3:in `<main>'

該当のソースコード

Ruby

require 'csv'

CSV.foreach("**********.csv") do |row|
if row[4] >= 100
p row
end
end

試したこと

文法ミスか何が書けているのかも分からず手当たり次第。

補足情報(FW/ツールのバージョンなど)

$ ruby --version
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]

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

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

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

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

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

guest

回答2

0

if row[4] >= 100

において、

=': comparison of String with 100 failed (ArgumentError)

文字列と整数100を比較できません、とエラーになっています。
CSVファイルを読み込んだままの状態では、各セルの値は文字列として読み込まれます。

Ruby

1if row[4].to_i >= 100

そこで上記のようにto_iをはさんで整数に変換すると良いでしょう。

投稿2018/04/25 04:18

編集2018/04/25 04:20
kazto

総合スコア7196

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

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

m8aFm77kKU9JuID

2018/04/25 20:35

ありがとうございます。 試してみます。
m8aFm77kKU9JuID

2018/04/30 00:11

滅茶苦茶できました。初心者だからと色々と言い訳せず精進します。
guest

0

ベストアンサー

... 文法ミスか何が書けているのかも分からず手当たり次第。...

エラーメッセージを手がかりにするとよいです。

******.rb:4:in >=': comparison of String with 100 failed (ArgumentError)

String と 100 の比較は失敗するよ といってます。

row[4] >= 100
の比較の部分です。 row[4] が string なのです。

解決作は、他の回答にある通りです。

蛇足として
csv を read しながら write することについての情報を示します。

RubyでCSVを読み込みつつ書き込む方法
https://teratail.com/questions/35356

Singleton method CSV.filter
[https://docs.ruby-lang.org/ja/latest/method/CSV/s/filter.html]

...
このメソッドは CSV データに対して Unix のツール群のようなフィルタを構築 するのに便利です。
...

投稿2018/04/26 13:57

katoy

総合スコア22324

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問