[#39671] Ruby 1.8.1 on SX-6 — Masaki Hasegawa <masaki-h@...4u.or.jp>

はじめまして、長谷川 と申します。

16 messages 2004/05/19
[#39673] Re: Ruby 1.8.1 on SX-6 — Tanaka Akira <akr@...17n.org> 2004/05/19

In article <20040519.205107.102564296.suuchi29@naps.kishou.go.jp>,

[ruby-list:39610] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-05-02 08:44:03 UTC
List: ruby-list #39610
山本です。

pegacorn@jcom.home.ne.jp wrote:
(2004/05/02 14:40)

>FNM_PATHNAME の方はわかりませんが、大文字・小文字の違いの扱いを動作環境に
>合わせる事は必要だと思います。
>理由は、大文字・小文字が区別されない環境では、大文字・小文字を区別しないのが
>普通で、そうしておかないとバグる可能性が非常に高いからです。
>(ファイル名を比較しているのであって単なる文字列を比較しているのではない)
>
>また、別の関数にするのではなく、fnmatch の動作を変える案↓に賛成です。
>fnmatch 自体 1.7 で追加されたメソッドなので、被害は少ないかと思うのですが…
># むしろ Windows 環境でバグっている場合の方が多い気がする

そうですね、FNM_PATHNAME については当時ほどこだわってないのですが、FNM_CASEFOLD に
ついてはデフォルト=動作環境のほうが使いやすい気がします。Python の fnmatch も
大文字・小文字の違いは動作環境に合わせているようです。

ただ、本当は FNM_CASECARE とかじゃなくて、c:/windows/system/(care:*.c) といった記法で
c:/windows/system は環境依存で、*.c は大文字・小文字の区別あり、というように、
パス要素単位で切り替えられるのが理想なのかもしれません。実現は困難でしょうけど・・・

# ところで、馬越さんも File.fnmatch のユーザじゃないんですね。私もそうなんですけど、
# 実際に使っている方の要望がないと難しい気がします。

pegacorn@jcom.home.ne.jp wrote:
(2004/05/02 16:42)

>File.fnmatch(と Dir.glob)をちょっと使ってみたのですが、
>大文字・小文字の処理でバグがありました。
>
>OS は、Windows 2000、
>ruby は、ruby 1.8.1 (2003-12-25) [i386-mswin32] です。
>
>----
>#!/usr/local/bin/ruby -Ks
>
>p File.fnmatch('abc', 'ABC', File::FNM_CASEFOLD) # => true
>p File.fnmatch('abc', 'ABC', File::FNM_CASEFOLD) # => false
>
>Dir.rmdir('abc') if File.exist? 'abc'
>Dir.mkdir('abc')
>p Dir.glob('a*', File::FNM_CASEFOLD) # => ["abc"]
>p Dir.glob('A*', File::FNM_CASEFOLD) # => []
>----
>
>NT 系の Windows では、以下のようになるのが正しいと思います。
>
>	=> true
>	=> true
>	=> ["abc"]
>	=> ["abc"]

これは、ruby 1.9.0 を試してみてください。マルチバイト対応

  ・全角文字の大文字・小文字の処理(Windowsのみ)
  ・SHIFT_JIS への対応

は、ruby 1.8.1 にはマージされていません。(というか、この後実装されたので)

rubyをビルドできる環境をお持ちなら、ruby1.8.1 に対するパッチを差し上げます。


In This Thread