[#39325] File.fnmatch の改良について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

はじめまして、山本です。

18 messages 2004/03/05

[#39429] trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

18 messages 2004/03/23
[#39454] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/03/31

白井です。

[#39460] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39465] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/04/01

白井です。

[#39466] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39453] Re: int/int in Ruby2? — Masaaki Sakano <mas@...>

坂野 正明です。

36 messages 2004/03/31
[#39455] Re: int/int in Ruby2? — NISHIMATSU Takeshi <t-nissie@...> 2004/03/31

西松と申します.

[#39470] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/01

坂野 正明です。

[#39473] Re: int/int in Ruby2? — matz@... (Yukihiro Matsumoto) 2004/04/01

まつもと ゆきひろです

[#39484] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/03

坂野 正明です。

[#39528] Re: int/int in Ruby2? — "T Akutsu" <locrian@...> 2004/04/09

あくつです。なんかわくわくしてきだぞ。(^^;)

[ruby-list:39334] Re: File.fnmatchの改良について

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

>>できればユニットテストを用意して、これとこれと
>>このテストケースが失敗するようになります、しかし次のような
>>利点があります……。と言ってくれればベストです。
>
>用意してみます。

こんなところでしょうか。

require 'test/unit'

class TestFile < Test::Unit::TestCase

  def test_fnmatch
    assert(File.fnmatch("[a/c]", "a", File::FNM_PATHNAME))
    assert(!File.fnmatch("[a/c]", "[a/c]", File::FNM_PATHNAME))
    assert(!File.fnmatch("**/hoge", "a/b/hoge", File::FNM_PATHNAME))
    assert(!File.fnmatch("[\\*]", "\\"))
    assert(!File.fnmatch("[]ab]", "]"))
    assert(File.fnmatch("[\\]]", "]"))
  end

end

フラグをHEADのままにしたものを

  http://www.ccsnet.ne.jp/~ocean/ruby-list/39330/

に置いています。

違いは、

  1. FNM_PATHNAME のとき、[ ] の中に '/' を含むことはできなくなる (SUSv3)
  2. FNM_PATHNAME のとき、**/ が使えるようになる
  3. [ ] の中で '\' はエスケープ文字として使えなくなる (SUSv3)
  4. パターン中で、DOSISHでも '\' はパス区切りとして使えなくなる

といったところです。1. はそもそも含んでも無視するしかないし、2. は利点で、3. は ']' は最初に書けばよく、
4.は、エスケープとしての働きがあるので、パス区切りにするのは不可能です。今は、\ の後にマジック文字が
きたらエスケープとみなし、マジック文字でなければパス区切りとしてますが、不幸なことに '[' と ']' は
DOSISH でもファイル名として使えるので、不完全です。

利点は **/ のサポート、'*' の高速化、SUSv3準拠で独自仕様を覚えなくてよくなる点です。
(Gavinも、この関数だけはいまだにドキュメントを見ないといけないと、言ってました)



In This Thread