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円です。

 

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

配列の要素を区切るカンマ

配列をつくるとき、最後の要素のあとにカンマをつけてもいいことを知らなかった。

 

ary=[ 1, 2, 3,]  # 3のあとのカンマはあっても大丈夫。

最後に空の要素が入るわけでもない。

p ary.size  #=>3

 

ウェブページを表示させるプログラムで、URLの管理に配列をつかってみた。このプログラムを何度もつかっているのだけれど、毎回すべてのページを表示させるわけではないので、必要なページだけ残し、あとはURLに#をつけてコメント化している。そのとき、最後の要素となるURLのあとのカンマを残しておくとエラーになると思って、いちいち取っていたけど、意味がなかった。

 

# Ruby 2.3.1 

require "open-uri"

urls=[

    "URL1",

#  "URL2",

    "URL3",  #ここのカンマはなくてもいいけどあっても問題ない。

#  "URL4"

]

urls.each do | url |

    open(url) do | f |

        puts f.read

    end

end

 

少し楽になった。

 

 

プログラミング初心者がウェブアプリを公開する方法

sinatra(シナトラ)アプリをheroku(ヘロク)にデプロイする方法を書きます。

 

Rubyを学びはじめて2か月くらいの頃、最初につくったアプリをウェブ上で公開するためherokuにデプロイしました。

herokuは簡単に利用できるといった解説が多いですがプログラミング初心者だとすんなりことがはこびません。わたしがそうでした。

なので、そのときつまずいたところをツールと流れにわけてまとめてみました。herokuにデプロイするためには作業の順番が大事です。ひととおり流れをつかんでからツールのインストールなりその他の作業にかかることをおすすめします。

ここにでてくる単語は検索すればすぐに見つかるものばかりです。詳しい解説は個別に調べて得てください。

 

まずは使うツールです。

 

sinatra

sinatraはウェブアプリをつくるRubyフレームワークです。

どんなに小さなプログラムのアプリでも何らかのフレームワークをつかったほうがWeb上で運営するには楽ですしセキュリティー対策にもなります。

sinatraのつかい方は比較的簡単です。ドットインストールなんかを見るだけでおおむねわかります。ちなみにドットインストールとはプログラミングレッスン用の動画サイトです。

 

git(ギット)

gitはファイルを管理してくれるソフトです。プログラミング関連の記事によくでてくるので初心者でも見かけたことぐらいはある単語だと思います。わたしもちょくちょく見かけてはいましたが、独りで小さなプログラムをつくるかぎりでは必要ないと思っていました。しかしherokuのデプロイにはgitが必要です。

 

bundler(バンドラー)

bundlerはRubyのgemです。gemのバージョン管理をしてくれるgemです。小さなプログラムをつくっているうちはありがたみを感じませんが、herokuでアプリを運営するとなると必要です。つかい方を学びましょう。

 

次に流れです。

 

最初にアプリ開発(制作)用にディレクトリ(フォルダー)をつくります。以後、アプリ関連のファイルはすべてこの中につくります。ディレクトリの位置は変えない方がいいのでつかいやすい場所につくりましょう。

 

bundle init

コンソール(windowsコマンドプロンプトmacのターミナル)でcdコマンドをつかってアプリ開発ディレクトリへ移動します。

移動できたらそこでbundle initと打ち込みbundlerイニシャライズします。

そうすると開発用のディレクトリ内にGemfileが自動でつくられます。以後、アプリにつかうgemをインストールする際はそのGemfileをつかいます。すでにインストールしてあるgemもGemfileに記入してbundle installします。そうするとGemfile.lockファイルが開発用のディレクトリ内にやはり自動でできます。これらGemfileとGemfile.lockファイルはアプリのファイルと一緒にherokuにデプロイするものです。特にGemfileは添付しないとherokuがアプリを受け付けてくれません。

 

 

sinatraを利用してアプリを完成させます。

 

 

config.ru(コンフィグラックアップ)ファイルをつくる。

アプリができたらエディターで

require './myapp.rb'

run Sinatra::Application

(注意:myapp.rbのところは自分がつくったアプリファイルの名前を記入します。)

と記入してconfig.ruという名前をつけ、開発用のディレクトリに保存します。このファイルもアプリのファイルと一緒にherokuにデプロイします。

 

git init

ファイルがすべてそろったらコンソールで開発用のディレクトリへ移動しgit initと打ち込みgitイニシャライズします。

開発用のディレクトリをgitイニシャライズしたあとは、gitの流儀にのっとってファイルを管理していく必要があるので注意してください。その点をふまえれば、git initはもっと早い段階ですませ、gitを積極的につかってもかまいません。

 

herokuのアカウントをとる。

herokuのアカウントも早い段階で取得してもかまいませんが、後述するheroku createはgit initのあとにした方がいいです。

 

herokuにアプリをつくる。

コンソールで開発用のディレクトリに移動してからherokuにログインしてheroku createします。

これでアプリ開発ディレクトリとherokuが自動的にひもづきます。git initしたあとにそのディレクトリからheroku createすることが大切です。あとからでもherokuとgitをひもづけることは可能ですが余計な手間となります。

 

herokuにアプリをデプロイする。

コンソールでアプリ開発ディレクトリに移動して、

git add . 

git commit -m "コメント"

git push heroku master

(注意:コメントの内容は自由です。)

でデプロイが成功するはずです。

 

 

 

文字列の配列をつくる%w

%wをつかって日本語の配列をつくるとき、要素と要素を全角スペースでつなぐと一つの要素になってしまう。
ary = %w(一番目 二番目 三番目)

p ary   #=>[ "一番目 二番目 三番目" ]

 

["一番目", "二番目", "三番目"]という配列を作りたい場合は半角英数のスペースをつかわないといけない。

ary2 = %w(一番 二番 三番)

p ary2   #=>[ "一番", "二番", "三番" ]

 

でもやってしまったことはしかたないので直す。

ary = %w(一番目 二番目 三番目)    #=> [ "一番目 二番目 三番目" ] 

ary2 = ary.join    #=>"一番目 二番目 三番目"

ary3=ary2.split(" ")    #全角スペースをダブルクオーテーションで囲む

p ary3    #=> [ "一番目" ,"二番目" ,"三番目" ]

 

今回の環境

macOS 10.12.1

ruby 2.3.1p112

コマンドプロンプトの文字化けをなおす方法

macのターミナルだと無意識にできることがwindowsコマンドプロンプトではひと手間必要になる。

コマンドプロンプトirb を起動して、

 

p "あいうえお"

 

と入力したら、

 

p "b b b

 

となってしまい「あいうえお」で確定できない。

しかたなく Ctrl + D で退出。

調べたら irb の起動時に --noreadline を足せばいいことがわかった。

irb --noreadline で起動したら日本語も入力できました。

ただし、--noreadline で起動して Ctrl + D と入力しても ^D と表示されて退出できない。

なので、exit を入力して退出。

 

もう一つコマンドプロンプトで文字化けする事例。

-- sample.rb (utf-8 LF) --

str = "あいうえお"

puts str

----------------------------
 

上のファイルを ruby sample.rb で実行する場合は化けずに表示してくれる。 

ところが、別ファイルを開いて表示させるプログラムを実行すると文字化けをおこす。

例えば以下の場合。

-- aiueo.txt (utf-8 LF) --

あいうえお

かきくけこ

さしすせそ

-----------------------

 

-- test.rb (utf-8 LF) --

file = File.open("aiueo.txt")

file.each_line do | line |
    puts line

end

file.close

------------------------

 

上のファイルを、ruby test.rb で実行すると文字化けする。

これも調べたら、ruby コマンドのあとに -E utf-8 を足せば良いとあった。

ruby -E utf-8 test.rb で実行したら文字化けせずに表示されました。

 

あと、openメソッドの引数を " "(ダブルクオート)でくくらなかったら、

undefined local variable or method   for main:Object (NameError)

とエラーになった。

いつもこまかいところで着実にひっかかる。

 

 

今回の環境は、

Windows 10.0

 ruby 2.3.1p112

コマンドプロンプトの設定:

MSゴシック

932(ANSI/OEM-日本語 Shift-JIS) ※ここの設定を変えればよさそうだけど変え方がよくわからなかった。