読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby の URI で日本語を含むURIに対応する。

ruby

日本語URIを扱うという戦い

rubyURIで日本語を含む文字列が扱えなくなったので、何とかしないといけないとアレコレ模索した。

>> URI.parse  'http://example.com/あああ'
URI::InvalidURIError: URI must be ascii only "http://example.com/\u{3042}\u{3042}\u{3042}"
from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/2.2.0/uri/rfc3986_parser.rb:20:in `split'

URI.encode が使えることを知った。

>> URI.encode 'http://example.com/あああ'
=> "http://example.com/%E3%81%82%E3%81%82%E3%81%

parse encode と合わせて使うことでほとんどの問題は解決する。

>> URI.parse URI.encode 'http://example.com/あああ'
=> #<URI::HTTP http://example.com/%E3%81%82%E3%81%82%E3%81%82>

これで、エラーなく扱うことができる。

が、、、、encode を毎回指定するのはめんどくさくないかな。

参考資料

http://d.hatena.ne.jp/haroperi/20110405/1301959688

rename Commandでぱぱっと連番付きファイルを作成する。

linux

連番を付記したファイルを作るのが、めんどくさくなってきた

for ループと sprintf を組み合わせたり、ruby ワンライナーでヤってたけど、だんだんめんどくさくなってきた

rename Commandでぱぱっと作ることにした

rename -N 01 -X -e '$_ = "京都旅行-2016-08-27_$N"' *.jpg

これでぱぱっと、ファイルを連番にできて便利すぎてヤバイ

-N : 引数のフォーマットと開始番号を指定する。例えば 0001 なら4桁0埋め、 100 なら開始番号が100
-X : 拡張子を置換対象にしない
-e : 出力するフォーマット $N が番号が入る所

rubyの置換でコールバックを使う。

ruby

JavaScript の String#replace はコールバックが使えて便利。

置換でコールバックの関数使えると便利なんですよね。

> a.replace(/a/, function(e){ console.log(e); return ''})
a
'bc'
>

js のこの仕様が結構過ぎで多用しまくっててクセになってた

ruby でもブロック渡せることを知った。

'abc'.gsub(/a/){ 'abc' } #=> "abcbc"

ブロック渡せるの便利だよね。大雑把な正規表現でも細かい部分を微調節できるし。正規表現をアレコレいじくり回して直感的じゃなくなったり、複雑になりすぎた正規表現を調整できる。

match でもブロック使える

>> 'abc'.match(/(.)/){|e|  p e ; nil   }
#<MatchData "a" 1:"a">
=> nil

正規表現が複雑になり過ぎないように、ブロックを使うのも悪くないよね。

参考資料

gsub, gsub! (String) - Rubyリファレンス