ワイルドカードの使い方を教えて下さい


超初心者  2002-03-14 09:57:51  No: 660  IP: [192.*.*.*]

お世話になっております。超初心者です・・・

ワイルドカードを使って、「〜9.〜」というファイル(例えばex9.txt)を検索したいのですが、「ex.d09」のようなファイルまであがってきてしまいます。

List:=TStringList.Create;

FoundDB:=FindFirst(Cdir+'\Data'+'\*9.*',faAnyFile,SearchRec);
while FoundDB=0 do
  begin
       List.Add(SearchRec.Name);
       FoundDB:=FindNext(SearchRec);
  end;

ソースはこんな感じなんですが、どうやら'.'が任意の1文字と認識されてしまうようです。(ヘルプを見てもそう書いてありました)
'.'を「任意の一文字」ではなく「.」と認識する方法を存知でしたら教えて下さい。

環境は、Delphi4、WinNTです。
よろしくお願いします。

編集 削除
にしの  2002-03-15 00:03:17  No: 661  IP: [192.*.*.*]

任意の1文字は'?'だったような・・・。
ヘルプを見ても、'.'が任意の1文字として認識するという記述はありませんでした。
'\*9.a*'で検索しても、
d09aaa
d09baa
は見つけませんでした。'.'が任意の1文字ならば、検索できるはずですから、違うのでしょう。

たぶんですが、'.'はある条件で消えてしまうのだと思います。
MS-DOS(さらにはCP/M)の頃は、8+3形式のファイル名でした。
このころのワイルドカードは、*を?に展開していました。
たとえば、
[abc*.txt]は、
[abc?????txt]
にしていました。
Windows95からは、ロングファイル名に対応していますが、ワイルドカードの処理は似たような仕様にしたのかもしれません。
そうなると、*9.*は、*9*と同じように扱われると思います。
ちなみに、*9.a*では、aaa9abbを見つけられません。

'.'を認識する方法は見つかりませんでしたが、そう難しく考えずに、見つけたファイル名に'9.'が含まれているかどうか調べればよいと思います。

編集 削除
超初心者  2002-03-15 14:38:48  No: 662  IP: [192.*.*.*]

う〜ん・・・うちの環境では、やっぱり
d09aaa
d09baa
もあがってくるんですよね・・・なんでだろう???
とりあえず、現在はファイル名に'9.'が含まれるかどうかを判定しています。

Delphi4のヘルプで「ワイルドカード」を検索すると、「正規表現」と「Bref型正規表現」が出てきて、「正規表現」の方の説明の中に、'.'は任意の一文字であるという説明が載っています。。。

うーーーん???

編集 削除
にしの  2002-03-15 22:01:09  No: 663  IP: [192.*.*.*]

正規表現って使えましたっけ?
もし、正規表現ならば、
[^9]*9\..*
とすればよいと思います。

ただ、正規表現は、Delphiの検索で使うものみたいです。
FindFirstで使えるワイルドカードは、*と?だと思います。

編集 削除
にしの  2002-03-16 19:46:04  No: 664  IP: [192.*.*.*]

間違えました。
[^9]だと、9.の9より前に9がある場合にヒットしません。
.*9\..*
でよいかと。

編集 削除
超初心者  2002-03-25 19:24:06  No: 665  IP: [192.*.*.*]

あいや〜やっぱりだめですねぇ〜
これはもしかして、Delphiのバグか???それとも私の環境がおかしいのか???

とりあえず、今は‘9.’を含むやつのみリストに追加という苦しい逃げをしています。

編集 削除