CSVデータからワード検索してみつからなかったらインフォメーションをだす

データの中から必要な情報をワード検索で選び出し、マッチするものがないときはインフォメーションをだすコードを、元のデータがデータベースに入っている場合とCSVファイルになっている場合の2パターン書いてみた。

 

データベースをつかう場合はactiverecordを利用した。

--  postgreSQL  --

id           name                price 

1         '愛媛産みかん'         100

2         '青森産りんご'         120

3         '和歌山産みかん'     110

4         '長野産りんご'         130

 

--  sample_database.rb  (Ruby 2.3.1)--

require 'active_record'

 

ActiveRecord::Base.establish_connection(

    adapter: 'postgresql',

    host:  '',

    username:  'user_name',

    password:  '',

    database:  'database_name'

)

 

class Sampledata < ActiveRecord::Base

end

 

keyword = "みかん"

datas = Sampledata.where( 'name like ?' , "%#{keyword}%" )

datas.each do | data |

    if data.size == 0

        puts "みつかりませんでした。"

    else

        puts "#{data['name']}の値段は#{data['price']}円です。"

    end

end

 

#=> 愛媛産みかんは100円です。

#=> 和歌山産みかんは110円です。

# keyword = "ぶどう"の場合は

#=> みつかりませんでした。

 

データベースは便利だけれどインストールが必要だったり、接続に手間がかかったりするので、カラム数やレコード数が少ない場合はCSVデータですませたい。

--  sample.csv  --

id , name , price 

1 , 愛媛産みかん , 100

2 , 青森産りんご , 120

3 , 和歌山産みかん , 110

4 , 長野産りんご , 130

 

--  sample_csv.rb  --

require 'csv'

 

datas = CSV.open("sample.csv" , "r")

keyword = "ぶどう"

count = 0

datas.each do | data |

    if /#{keyword}/ =~ data[1]

        puts "#{data[1]}の値段は#{data[2]}円です。"

        count += 1

    end

end

if count == 0

   puts "みつかりませんでした。"

end

datas.close

 

#=> みつかりませんでした。

# keyword = "みかん"の場合は 

#=> 愛媛産みかんは100円です。

#=> 和歌山産みかんは110円です。

 

もっとうまいことできそうな気はする。