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 件のコメント:

  1. 手元の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で直ったようです

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

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

    返信削除