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

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

ただいまの
回答率

90.52%

  • Ruby

    7649questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 114

 前提・実現したいこと

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]

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+2

if row[4] >=  100

において、

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

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

if row[4].to_i >= 100


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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/26 05:35

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

    キャンセル

  • 2018/04/30 09:11

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

    キャンセル

checkベストアンサー

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 のツール群のようなフィルタを構築 するのに便利です。
...

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 解決済

    rbenv: cannot rehash: /usr/local/rbenv/shims isn't...

    raspberry pi(ubuntuとほぼ一緒)を用いてrails のデプロイをしようとしていたところ、 rbenvで管理していたrubyのバージョンが変わっていなかったことに築

  • 解決済

    このエラーの治し方がわかりません

    プログラミング初心者です。 twitterみたいなアプリを作っていて 一つの投稿(tweet)に対し コメントが書き込めるようにフォームを作るところまでできたのですが、

  • 解決済

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

    rubyのcsvの読み込みについてご質問があります。 実現したい事 csvの特定の行を読み込みたい エラー内容 読み込み出来るのですが、行ではなく列を読み込んでしま

  • 解決済

    railsのgemで導入したJQueryプラグインファイルについて

    いつも皆さんにはお世話になっています。 この度、gemでFullcalendarというJQueryで作成しているカレンダーを導入したのですが、少しカスタマイズを加えたいと思い

  • 解決済

    csvへの出力

    実現したいこと 下記のような内容のcsvファイルを出力させたいと思っています。 "name","score1","socore2","average" "A","40","

  • 受付中

    CSVファイルの保存について

    スクレイピングをしていて、ファイルを保存したいのですが、エラーが出てしまい保存できません。以下のコードを書いているのですが、これだと保存はできないのでしょうか? CSV.op

  • 解決済

    rubyのsplit関数のソースについて

    おはようございます rubyのsplitやchomp関数のソースがみたくて、rubyのgitをcloneしたのですが、それらしい部分がどこにもありませんでした。 かかれ

  • 受付中

    rails appのbundleがインストールできない

    bundle install Fetching gem metadata from https://rubygems.org/......... Fetching version

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

  • Ruby

    7649questions

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