何度調べてもすぐ忘れる(にわとり、いや、ひよこか)からメモする
[例外処理]
begin
# 例外が発生する可能性のある処理
rescue => e
# 例外が発生したときに行う処理、eには捕捉した例外が入る
else
# 例外が発生しなかったときに行う処理
ensure
# 例外が発生したかどうかに関わらず、必ず行う処理
end
<ソース>
------------------------------------------------------------
begin
open('non-exist.txt')
rescue => error
puts error
else
puts 'ok'
ensure
puts 'end'
end
begin
open('exist.txt')
rescue => error
puts error
else
puts 'ok'
ensure
puts 'end'
end
------------------------------------------------------------
<実行結果>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No such file or directory - non-exist.txt
end
ok
end
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
こんなことも覚えられない(笑)
2009年7月7日火曜日
rubyのちょっとしたメモ [each]
何度調べてもすぐ忘れる(にわとりだ//)からメモする
[each]
each_indexでインデックスによるイテレーションができる。
<ソース>
---------------------------------------------------------
char = ['a', 'b', 'c']
char.each_index do |i|
puts i
end
---------------------------------------------------------
<実行結果>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0
1
2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
each_with_indexでバリューとインデックスによるイテレーションができる
---------------------------------------------------------
char = ['a', 'b', 'c']
char.each_with_index do |c, i|
puts i
puts c
end
---------------------------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0
a
1
b
2
c
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
eachにはこんな使い方もある
---------------------------------------------------------
a = ['taro', 18, 80]
b = ['jiro', 16, 70]
c = ['tagosaku', 15, 100]
array = [a, b, c]
array.each do |name, age, score|
puts name
puts age
puts score
end
---------------------------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
taro
18
80
jiro
16
70
tagosaku
16
100
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
なるほど・・・、rubyおそるべし・・・。
[each]
each_indexでインデックスによるイテレーションができる。
<ソース>
---------------------------------------------------------
char = ['a', 'b', 'c']
char.each_index do |i|
puts i
end
---------------------------------------------------------
<実行結果>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0
1
2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
each_with_indexでバリューとインデックスによるイテレーションができる
---------------------------------------------------------
char = ['a', 'b', 'c']
char.each_with_index do |c, i|
puts i
puts c
end
---------------------------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0
a
1
b
2
c
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
eachにはこんな使い方もある
---------------------------------------------------------
a = ['taro', 18, 80]
b = ['jiro', 16, 70]
c = ['tagosaku', 15, 100]
array = [a, b, c]
array.each do |name, age, score|
puts name
puts age
puts score
end
---------------------------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
taro
18
80
jiro
16
70
tagosaku
16
100
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
なるほど・・・、rubyおそるべし・・・。
2009年6月27日土曜日
[Ruby]シングルクォートをエスケープ
Rubyで正規表現を使ってシングルクォートをエスケープしようとした。
------------------------------
str = "I'm lovin' it"
str.gsub!(/'/, "\\'")
puts str
------------------------------
そしたらなぜかこうなった
(実行結果)
^^^^^^^^^^^^^^^^^^^^^
Im lovin' itm lovin it it
^^^^^^^^^^^^^^^^^^^^^
なぜだ・・・。意味が分からなすぎる。
いろいろ調べたけどどうしてそうなるのか分からなかった(笑)
で、結局違うやり方で
--------------------------------
str = "I'm lovin' it"
str.gsub!(/'/) do |m|
'\\' + m
end
puts str
--------------------------------
こうやったら
^^^^^^^^^^^^^^^^^^^^^^^
I\'m lovin\' it
^^^^^^^^^^^^^^^^^^^^^^^
ちゃんとできた。これで出来るならまぁいいか(妥協)
ちなみになぜシングルクォートをエスケープしたいかというと
RubyからMySQLにデータを入れるときにテキストでシングルクォートを入れたいから。
------------------------------
str = "I'm lovin' it"
str.gsub!(/'/, "\\'")
puts str
------------------------------
そしたらなぜかこうなった
(実行結果)
^^^^^^^^^^^^^^^^^^^^^
Im lovin' itm lovin it it
^^^^^^^^^^^^^^^^^^^^^
なぜだ・・・。意味が分からなすぎる。
いろいろ調べたけどどうしてそうなるのか分からなかった(笑)
で、結局違うやり方で
--------------------------------
str = "I'm lovin' it"
str.gsub!(/'/) do |m|
'\\' + m
end
puts str
--------------------------------
こうやったら
^^^^^^^^^^^^^^^^^^^^^^^
I\'m lovin\' it
^^^^^^^^^^^^^^^^^^^^^^^
ちゃんとできた。これで出来るならまぁいいか(妥協)
ちなみになぜシングルクォートをエスケープしたいかというと
RubyからMySQLにデータを入れるときにテキストでシングルクォートを入れたいから。
2009年6月24日水曜日
RubyでMySQLにアクセス
いやぁ大変だった。何も知らない状態から調べつつやるのって大変ね
無駄な手順があるかと思うけど踏んだ手順を全部書く
1, Ruby-1.9じゃだめと言われたからRuby-1.8を入れなおす
2, MySQL4.1を入れる
3, gem install mysqlでMySQL/Rubyを入れる
4, zlib.dllがないと言われるのでとって来たzlib.dllをruby/binに入れる
5, 以下のコードを動かしてみる
-------------------------------------------------------------------------------------
require 'rubygems'
require "mysql"
host = 'localhost'
user = 'root'
pass = 'rootpass'
dbname = 'test_ruby'
db = Mysql::connect(host, user, pass, dbname)
rs = db.query('select * from test_table')
rs.each do |item|
puts item[0]
end
--------------------------------------------------------------------------------------
6, 動いた!感涙・・・。
これ読んでも何も分からんね、また後で書き直そう
無駄な手順があるかと思うけど踏んだ手順を全部書く
1, Ruby-1.9じゃだめと言われたからRuby-1.8を入れなおす
2, MySQL4.1を入れる
3, gem install mysqlでMySQL/Rubyを入れる
4, zlib.dllがないと言われるのでとって来たzlib.dllをruby/binに入れる
5, 以下のコードを動かしてみる
-------------------------------------------------------------------------------------
require 'rubygems'
require "mysql"
host = 'localhost'
user = 'root'
pass = 'rootpass'
dbname = 'test_ruby'
db = Mysql::connect(host, user, pass, dbname)
rs = db.query('select * from test_table')
rs.each do |item|
puts item[0]
end
--------------------------------------------------------------------------------------
6, 動いた!感涙・・・。
これ読んでも何も分からんね、また後で書き直そう
2009年6月20日土曜日
Twitter crawler with ruby 3
ライブラリを使わないでTwitter APIを使ってみた。
(JSONパーサは使ってるけど)
--------------------------------------------------------------------------------
require 'net/http'
require 'json'
request = Net::HTTP::Get.new('/search.json?q=hoge&rpp=2')
http = Net::HTTP.start('search.twitter.com')
response = http.request(request)
puts JSON.parse(response.body)
---------------------------------------------------------------------------------
>request = Net::HTTP::Get.new('/search.json?q=hoge&rpp=2')
はjson形式で結果を取得、文字列hogeを含む最新の発言を最大2件取得するという意味。
>response = http.request(request)
で、responseにはjson形式の文字列が返される
>puts JSON.parse(response.body)
response.bodyは、responseから#<net::httpok:0xc5f9e0>部分を取ったもの。
それをパースしてHash型で返す。
json形式の文字列がどんなものかは
http://apiwiki.twitter.com/Twitter-Search-API-Method%3A-search
のJSON exampleを見ればOK!
(JSONパーサは使ってるけど)
--------------------------------------------------------------------------------
require 'net/http'
require 'json'
request = Net::HTTP::Get.new('/search.json?q=hoge&rpp=2')
http = Net::HTTP.start('search.twitter.com')
response = http.request(request)
puts JSON.parse(response.body)
---------------------------------------------------------------------------------
>request = Net::HTTP::Get.new('/search.json?q=hoge&rpp=2')
はjson形式で結果を取得、文字列hogeを含む最新の発言を最大2件取得するという意味。
>response = http.request(request)
で、responseにはjson形式の文字列が返される
>puts JSON.parse(response.body)
response.bodyは、responseから#<net::httpok:0xc5f9e0>部分を取ったもの。
それをパースしてHash型で返す。
json形式の文字列がどんなものかは
http://apiwiki.twitter.com/Twitter-Search-API-Method%3A-search
のJSON exampleを見ればOK!
2009年6月19日金曜日
Twitter crawler with ruby 2
前回悩んでたサンプルコードが動く動かないの違いが分かった。
単純すぎて恥ずかしいけど(笑)。
どうやら使ってるライブラリが違うらしい。
twitter apiをrubyで使えるライブラリは3つくらいあるらしく、自分が使ってたのは
john nunemakerによるライブラリ http://twitter.rubyforge.org だった。
これからはこれとは違うライブラリ、twitter4r http://twitter4r.rubyforge.org/ を使っていこうと思う。
インストールの仕方は例のごとくちゃちゃっとググレで(笑)。
研究の関係で検索機能を実装したいんだけど、twitter4rのドキュメント http://twitter4r.rubyforge.org/rdoc/ を読んでもsearch系のメソッドがない・・・。
んで、探しに探してようやく見つけたsearch。
-------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
client = Twitter::Client.new
puts client.search(:q => 'hogehoge', :rpp => 10)
-------------------------------------------------------------------------------------
このコードで文字列hogehogeを含む最新のつぶやきを最大10件取得できる。
また
-------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
client = Twitter::Client.new
puts client.search(:from => 'yuto_ymgc', :rpp => 10)
-------------------------------------------------------------------------------------
で、yuto_ymgcが発した最新のつぶやきを最大10件取得できる。
ここで問題発生
yuto_ymgcが発したつぶやきの中で、文字列hogeを含むものを取得したいとき
--------------------------------------------------
client.search(:from => 'yuto_ymgc', :q => 'hoge')
--------------------------------------------------
としても何も返ってこない。
対応してないのかな。不便!
単純すぎて恥ずかしいけど(笑)。
どうやら使ってるライブラリが違うらしい。
twitter apiをrubyで使えるライブラリは3つくらいあるらしく、自分が使ってたのは
john nunemakerによるライブラリ http://twitter.rubyforge.org だった。
これからはこれとは違うライブラリ、twitter4r http://twitter4r.rubyforge.org/ を使っていこうと思う。
インストールの仕方は例のごとくちゃちゃっとググレで(笑)。
研究の関係で検索機能を実装したいんだけど、twitter4rのドキュメント http://twitter4r.rubyforge.org/rdoc/ を読んでもsearch系のメソッドがない・・・。
んで、探しに探してようやく見つけたsearch。
-------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
client = Twitter::Client.new
puts client.search(:q => 'hogehoge', :rpp => 10)
-------------------------------------------------------------------------------------
このコードで文字列hogehogeを含む最新のつぶやきを最大10件取得できる。
また
-------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
client = Twitter::Client.new
puts client.search(:from => 'yuto_ymgc', :rpp => 10)
-------------------------------------------------------------------------------------
で、yuto_ymgcが発した最新のつぶやきを最大10件取得できる。
ここで問題発生
yuto_ymgcが発したつぶやきの中で、文字列hogeを含むものを取得したいとき
--------------------------------------------------
client.search(:from => 'yuto_ymgc', :q => 'hoge')
--------------------------------------------------
としても何も返ってこない。
対応してないのかな。不便!
2009年6月17日水曜日
Twitter crawler with ruby
まずはRubyGemsのインストールとtwitterライブラリのインストール。
(やり方はちゃちゃっとググってください)
まぁたぶんここまでは簡単にできるんだけど
そこら辺に落ちてるサンプルコードを動かそうと思って
----------------------------------------------
require 'rubygems'
require 'twitter'
twit = Twitter::Base.new("mail", "pass")
twit.update('hooooo')
----------------------------------------------
ってやっても動かない。
なにやらBaseのinitializeは引数を二つじゃなく一つだけとるらしい。
でもこのタイプのコードでみんな動いてるらしいんだよなぁ・・・。なんでだろ
そんでいろいろ探してたら別のタイプのサンプルコード発見
----------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
httpauth = Twitter::HTTPAuth.new('mail', 'pass')
twit = Twitter::Base.new(httpauth)
twit.update('hoooooo')
----------------------------------------------------------------------------------------
これだと動く(やったね)
理由はおいおい確認していくとして、とりあえず今回はAPIつかってtwitterに投稿できたってことでOK!
(やり方はちゃちゃっとググってください)
まぁたぶんここまでは簡単にできるんだけど
そこら辺に落ちてるサンプルコードを動かそうと思って
----------------------------------------------
require 'rubygems'
require 'twitter'
twit = Twitter::Base.new("mail", "pass")
twit.update('hooooo')
----------------------------------------------
ってやっても動かない。
なにやらBaseのinitializeは引数を二つじゃなく一つだけとるらしい。
でもこのタイプのコードでみんな動いてるらしいんだよなぁ・・・。なんでだろ
そんでいろいろ探してたら別のタイプのサンプルコード発見
----------------------------------------------------------------------------------------
require 'rubygems'
require 'twitter'
httpauth = Twitter::HTTPAuth.new('mail', 'pass')
twit = Twitter::Base.new(httpauth)
twit.update('hoooooo')
----------------------------------------------------------------------------------------
これだと動く(やったね)
理由はおいおい確認していくとして、とりあえず今回はAPIつかってtwitterに投稿できたってことでOK!
登録:
投稿 (Atom)
