• 締切済み

RubyでCSVファイルから検索するには??

ruby初心者です。 よろしくお願いします。 以下のようなcsvファイルからユーザーの入力内容をキーに 該当する行を検索して表示させるというような処理を実行したいです。 name,email,tel andy,andy@yahoo.co.jp,090xxxxxxxx bob,bob@yahoo.co.jp,090xxxxxxxx amy,amy@yahoo.co.jp,090xxxxxxxx 入力例:amy 出力:amy,amy@yahoo.co.jp,090xxxxxxxx (該当する行を全て出力させたい) ご教授よろしくお願い致します。 環境:Win7、ruby2.0

  • Ruby
  • 回答数2
  • ありがとう数10

みんなの回答

回答No.2

-----------csv.rb------------- require "csv" print "Enter the key :" key = (gets.to_s).chomp CSV.open("test.csv","r") do |csv| csv.each do |row| if row[0] == key print row end end end ------------------------------ ----------test.csv------------ name,email,tel andy,andy@yahoo.co.jp,090xxxxxxxx bob,bob@yahoo.co.jp,090xxxxxxxx amy,amy@yahoo.co.jp,090xxxxxxxx ------------------------------ 動作確認:ruby 2.0.0p247 (2013-06-27) [i386-mingw32] ※ Ruby 1.8系だとCSVメソッドの仕様が変更になっているので注意。 あと、文字コード認識も(ruby 1.8系は)甘いので、Ruby 2.0系じゃないと動かないです。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

該当する行とは?name欄が一致すると言うことでいいですか? ruby -nle "puts $_ if /^amy,/" filename.txt Windows標準機能で、 findstr /b "amy," filename.txt でもOK。

関連するQ&A

  • RubyによるCSVファイルの該当行の取り出し

    お世話になります、 Rubyプログラムにて以下のようにCSVファイルをコピー&ペーストしておりますが、 出力結果の1-4行目までの数値は必要ないため、5行目より処理をしたいのです。 良い方法があればご教示いただけないでしょうか。 ・RubyProgram <snip> p1 = ARGV[0] # p1:出力ログ対象CSV file_csv = File.open(p1,"r") while csv_word = file_csv.gets do chk_value_log.print csv_word p csv_word end file_csv.close chk_value_log.close <snip> ・出力結果 $ ruby -v aaaaa.rb bbbb.csv ruby 1.8.4 (2005-12-24) [i386-cygwin] "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "1,3,1101,0,32,19,1152,1,4,0,0,0,0,0,0,0,0,1152,1101,51,0,0,0,0\r\n" "1,4,254,0,7,3,264,1,3,0,0,0,0,0,0,0,0,264,254,10,0,0,0,0\r\n" "1,1,-1,0,25,66,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,70,2945,8153\r\n"

  • csvファイル検索

    フォームから検索文字を入力してもらい 4列、2000行ほどのcsvファイル内を検索し、ヒットしたらその行を出力するというものを作りたいと考えています。 csv  ------------------------- 1|自転車 バイク 2056,タイヤ,ペダル,ハンドル  |  ------------------------- 2|バイク 2001,タイヤ,ペダル,ハンドル      |  ------------------------- 3|自転車 バイク 2001,タイヤ,ペダル,ハンドル  |  ------------------------- 4|自転車 バイク 5601,タイヤ,ペダル,ハンドル  |  ------------------------- といった行があったとして、フォームに "自転車 56"と入力した際、 1行目3行目4行目の文字列を表示したいのですが、その際 1行目と4行目は2つヒットしているので3行目より上に表示させたいのです。 yahooなどの検索サイトのor検索のようなものです。(スペース区切り) 正規表現でやればいいのか?と思い手をつけてみたのですがどうも違うようですし、もしかしたらPHPで作ろうというのが間違っているのかもしれませんが、何か方法及び参考になるurlがありましたら教えてください。 よろしくお願いします。 windows2000 php4-4.3.8-18です。

    • 締切済み
    • PHP
  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • VBA csvファイルのデータをリストビューへ

    こんばんは、いつもお世話になっております。 素人ですが、宜しくお願いいたします。 タイトル通りなのですが、csvファイルにあるデータをリストビューで表示したいと思っています。 リストボックスなどへの方法は検索するとヒットするのですが、 リストビューの方法はあまりないのか、見つかりませんでした。 test.csv 1,Name,Tel,Address,Address2 2,Name,Tel,Address,Address2 上記のようなデータが10行ほどあります。 何か参考になるサイトなどでも結構ですので、 ご教授願います。宜しくお願いいたします。

  • PHP5+MySQL5 CSVから、更新、追加する処理の書き方

    こんにちは。 PHP5とMySQL5を使っています。 CSVファイルを読み込み、キーが存在するレコードは更新、 存在しなければ追加、という処理について 色々な書き方を教えて頂けたらと思います。 例えば、フィールドは、ユニークキーとなる[ID]、 [Name]、[TEL]の3つとします。 1.CSV読む 2.行と列の2次元配列に格納 3.行数分ループ開始 3-1.IDをキーに、SELECT 3-2.存在したら 3-3.UPDATE更新 3-2.存在しなかったら 3-3.INSERT追加 4.行数分ループ終了 と考えています。 CSVに100行あったら、100回SELECT掛けることになりますが、 この書き方で問題ないでしょうか? もっと判り易い、こんな書き方も! というのがありましたら、是非頂けますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • csvファイルの読み込みとOracleDBへの更新

    VB6.0とOracle9i、どちらも初心者です。 C:\直下にあるtest.csvファイルを読み込み、Oracleのテーブルと比較して存在しないものはinsert、存在するものはupdateする。 ・test.csvファイル(百行) "LOCATE", "COMPANY_CODE", "COMPANY_NAME", "COMPANY_KANA", "ZIPCODE", "ADDRESS", "TEL_NO", "FAX_NO", "CATEGORY", "INDUSTRIES", "PERSONS" ・OracleのCustomerテーブル COMPANY_CODE NUMBER COMPANY_NAME VARCHAR2 COMPANY_KANA VARCHAR2 ZIPCODE CHAR ADDRESS VARCHAR2 TEL_NO CHAR TEL_NO_2 CHAR FAX_NO CHAR HP_URL VARCHAR2 NOTE VARCHAR2 CUST_VARCHAR_1 VARCHAR2 CUST_VARCHAR_2 VARCHAR2 CUST_VARCHAR_3 VARCHAR2 CUST_VARCHAR_4 VARCHAR2 ・ロジック 1.oo4oでOracleに接続 2.csvファイルの読み込み 3.oracleのレコードとの比較 4.insertプログラム 5.updateプログラム ・コード '** oo4o 接続 dbname = "****" cnuser = "****/****" Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase(dbname, cnuser, ORADB_DEFAULT) Open "c:\test.csv" For Input As #1 ' csvファイルをオープンして、1行ずつループで取り込んで、取り込んだcsvレコード(行)を元にキー項目(COMPANY_CODE)を条件に既にOracleテーブルにあればInsertクエリを, なければUpdateクエリを発行する、をファイルエンドまで繰り返します。 自分でなんとか書いて聞くのが礼儀だと思いますが、調べてもやっぱりどう書けばよいのか全くわかりません。懸念事項として、Oracleのテーブルの列とCSVの列の数や並び方が異なっていることがあります。よろしくお願いします。

  • Rubyでの行列式の計算について

    Rubyでcsvファイルから行列の値を読み込んで、 行列式の乗算をしたいのですがエラーがでて困っています。 例えばA.csvがcsvファイルの形式で100行20列の行列でB.csvもcsvファイルの形式で20行3列の行列としたとき、 require 'matrix' require 'csv' ma = CSV.read(A) mb = CSV.read(B) mc = ma * mb print mc, "\n" と入力すると、":in `*': can't convert Array into Integer (TypeError)" というエラーが出てしまいます。 プログラミング初心者なので根本的なところが理解できていないかも知れませんが、解決法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • CSV出力のダブルクォーテーションについて

    ウェブアプリからCSV出力を行いたいのですが 出力行の両端に「"」(ダブルクォーテーション)が一緒に出力されます。 このダブルクォーテーションを出力したくありません。どうすればいいでしょうか?ご教授お願いします。 ちなみに下記は自分で作った例です。また使用するクラスはCSV::Writer以外でもかまいません。 class hoge  def exprt   cntnt_type = "text/csv"   ##ファイル名称の設定   file_name = "hoge.csv"   ##CSVオブジェクトを生成し、データをセットしていく   CSV::Writer.generate(output = "") do |csv|     csv << ["hoge", "fuga"]   end   ##CSVファイルの出力   send_data(output, :type => cntnt_type, :filename => file_name) end

  • PHPのデータをCSVファイルに保存

    PHPで入力された情報を、CSVファイルに保存したいのですがうまくいきません。 $list=array($name,$jyusyo,$mail,$tel,$text); $fp=fopen('dat/dat.csv','a+'); foreach($list as $line){ fputcsv($fp,split(',',$line)); } fclose($fp); ウェブで調べてこのような形のものを作成してはみたんですが、 エラーが出てしまいます。CSVファイルに保存したい時は、 CSVファイルを先に作るべきなのでしょうか?そうでしたら、 作成の仕方を教えていただきたいです。 初心者ですがよろしくお願いします。

    • 締切済み
    • PHP
  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。