2009年10月15日木曜日

RubyのFile.extnameについて

Rubyでファイルの種類を拡張子で判別しようと、File.extnameを使用してみたのだが、上手く拡張子を判別することができないことがあった。


irb(main):006:0> File.extname("01 miku.mp3")
=> ".mp3"
irb(main):007:0> File.extname("01 miku .mp3")
=> ""


拡張子の直前にスペースが含まれているとダメらしい。
自分で正規表現使って判別するしかないのか…
/.+(\..+)$/ …で良いのかな…?

半角スペースが入ってるなんてぱっと見分からず、最初物凄く悩んでしまった…(´・ω・`)



ちなみに実行環境はruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]でした。

2 件のコメント:

匿名 さんのコメント...

手元のRubyで試してみました
WindowsXPのコマンドプロンプトでruby.exe -e "p [File.extname('01 miku.mp3'),File.extname('01 miku .mp3'),RUBY_DESCRIPTION]"
[".mp3", ".mp3", "ruby 1.8.7 (2008-05-31 patchlevel 0) [i386-mingw32]"]
[".mp3", ".mp3", "ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mingw32]"]
[".mp3", "", "ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mingw32]"]
[".mp3", "", "ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]"]
[".mp3", "", "ruby 1.8.7 (2009-04-08 patchlevel 160) [i386-mingw32]"]
[".mp3", ".mp3", "ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mingw32]"]

1.8.7 patchlevel 72 でエンバグして174で直ったようです

Le Fay さんのコメント...

情報ありがとうございます。
結局、自分で再定義して使っていました…

つい更新するのを忘れていたようです。