勝手にしやがれ Part2.

【投稿時の注意】
パスワード入力:必須。投稿後の削除時は同じパスワードを使います。
投稿者入力:いまのところ任意。入力を省略すると「名無しさん」がデフォルトで表示されます
Eメール入力:いまのところ任意。
リンクの入力:本文中に http の文字列が含まれると投稿出来ません。URL を貼るときは h 抜きで ttp:// とするなど工夫してみて下さい

2 / 13 ツリー ←次へ | 前へ→

【119】srepについて 文太 2008/10/07(火) 23:21

【154】Re:ワイルドカードの展開規則 文太 2008/10/25(土) 0:19
【156】Re:ワイルドカードの展開規則 としき 2008/10/25(土) 22:50
【157】Re:ワイルドカードの展開規則 文太 2008/10/25(土) 23:37
【161】Re:ワイルドカードの展開規則 文太 2008/10/27(月) 17:55

【154】Re:ワイルドカードの展開規則
 文太  - 2008/10/25(土) 0:19 -

引用なし
パスワード
    しつこいですね。すいません。とりわけSiさんとすれば、wildのことを除けば、
おそらくすごく興味がある話題でもないでしょうし。m(__)m

 ただ、ふと思いついてしまったのです。
 いえ、sed, awk, perlのDos日本語版移植はすべてserowさんがされているわ
けで、それらが違うほうが変だな、と。
 (もっともserowさんの影響を受けないでグレップの開発もなかったみたいで
はありますが…。)

 Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると
すると(これが最大のニュース)、もう、必要な場面で、逐一やるしかないので
すが、基準があると何が特殊か分かると思い、これだけはやっておこうと思った
グレップたちです。(command.comが「特殊」に分類されてしまったりする…。)
 どうやら、新出さんが正しいですね。ま、その後のことはともかく、思いっき
り間違ったことを書く人のわけはないですから。ワイルドも正しいです!

-------------------------------------------------
C:\XYZ>Command.com /cType abc
aaa

C:\XYZ>Command.com /cType abc.txt
aa

C:\XYZ>cgrep -t "aa" *        #wildcardさえマッチすれば両方
abc 1:aaa            #グレップされる検索パターン

C:\XYZ>cgrep -t "aa" *.*
abc 1:aaa
abc.txt 1:aa

C:\XYZ>ygrep -t "aa" *
abc    1:aaa

C:\XYZ>ygrep -t "aa" *.*
abc    1:aaa
abc.txt    1:aa

C:\XYZ>izgrep -t "aa" *
ABC 1:aaa

C:\XYZ>izgrep -t "aa" *.*
ABC 1:aaa
ABC.TXT 1:aa

C:\XYZ>grep "aa" *
aaa

C:\XYZ>grep "aa" *.*
ABC:aaa
ABC.TXT:aa

C:\XYZ>Command.com /cDir \bin\grep
GREP   EXE   90959 94-06-02  18:50

C:\XYZ>cgrepb "aa" *        #Bruce.さん版
aaa

C:\XYZ>cgrepb "aa" *.*
abc:aaa
abc.txt:aa

C:\XYZ>yagrep "aa" *        #32bit grep (by Bruce.さん)
ABC:aaa                #きっとWin APIがwildcard展開を担当
ABC.TXT:aa

C:\XYZ>yagrep "aa" *.*
ABC:aaa
ABC.TXT:aa
-------------------------------------------------

【156】Re:ワイルドカードの展開規則
 としき WEB  - 2008/10/25(土) 22:50 -

引用なし
パスワード
   いくつか。

> Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると

現実的には問題ないとは言え、実はこれは最大の問題だったりする。
ソースが公開されているフリーウェアの場合、ものによっては、複数の処理系に
対応していたりするわけです。さらに、それぞれの処理系用のmakefileまで同梱
されていたりして。
そういう場合、DOSの時代の国産ソフトだと、たいがいはMS-C(or Quick C)とTurbo C(or Borland C)とLSI C-86ですが、配布されている実行ファイルをそのま
ま使っているうちはいいけれど、手持ちの処理系でコンパイルしなおしたら挙動
が違う、なんて事はありそうな話。


もう一つ、#136であった話ですが。

> 注意せよ。DOS本来のワイルドカード解釈では「*」は、ファイル名
> の本体および拡張子のそれぞれの中において、「*」以降の文字列照
> 合をしない、という意味を持っており(例えば「p*」は「pqr.c」に
> はマッチしない)

前段については、DOSの仕様として明記されている話のようです。
以下、NEC版MS-DOS5.0Aユーザーズリファレンスマニュアルより引用。

> アスタリスク(*)は、ファイル名の名前と拡張子の中で、それ以降が“1文
> 字以上の任意の文字列”を表すワイルドカードです。

ところで、手元には、ASCII出版局の「標準MS-DOSハンドブック」があります。
序文によると、この本は、さらに古いDOS2.0を対象に書かれています。なにせ、
84年が初版です。この本では、単純に

> "*"は、任意の複数文字とマッチします。

としか書かれていません。
ただ、この本の後ろの方には、重要な記述がありました。

> "*"はユーザープログラムまたはシステムコールによって"?"に展開しなければ
> ならない

これらから、以下は推測。
仕様としては、「*」は「????????.」に展開されるべきであった。ところが、な
ぜかシステムコールでは「????????.???」に展開されてしまっている。


おまけ。
参考というか、検証すればすぐわかる事なんですが。
今回、文太さん、「*」というワイルドカードについて調べています。
が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
れるのではないかと思います。

【157】Re:ワイルドカードの展開規則
 文太  - 2008/10/25(土) 23:37 -

引用なし
パスワード
   としきさん

 正確なところのフォローありがとうございます。全体に納得のいく話でした。

>> Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると
>現実的には問題ないとは言え、実はこれは最大の問題だったりする。
>手持ちの処理系でコンパイルしなおしたら挙動
>が違う、なんて事はありそうな話。
 実際上は試しようもありませんが、十分あり得ますね、きっと。

> 「標準MS-DOSハンドブック」
 Dos3対応版を数日前から探しています。引っ越しで捨てたのかなぁ。ったく。

>> "*"はユーザープログラムまたはシステムコールによって"?"に展開しなければ
>> ならない
>これらから、以下は推測。
>仕様としては、「*」は「????????.」に展開されるべきであった。ところが、な
>ぜかシステムコールでは「????????.???」に展開されてしまっている。

 これはやる気があれば調べられるはずですが、 はい、「* は単純に ? 複数個
に展開されて処理されており」という記述は見ました。きっとそうでしょう。

> 今回、文太さん、「*」というワイルドカードについて調べています。
> が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
> れるのではないかと思います。

 はい、その後そう気づいておりました。「文太さん的にはこう考え・調べるべき」
アドバイスありがとうございます。Dosレベルで(昔から)「foo.」というファ
イル名が許されているので(さすがに、fooの存在するディレクトリで共存はできま
せんが)。ありがとうございました。m(__)m

【161】Re:ワイルドカードの展開規則
 文太  - 2008/10/27(月) 17:55 -

引用なし
パスワード
   としきさん

> おまけ。
> 参考というか、検証すればすぐわかる事なんですが。
> 今回、文太さん、「*」というワイルドカードについて調べています。
> が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
> れるのではないかと思います。

 「サービスだぞ」って、わざわざ教えてくれているのに反応がとろくてすいま
せん。「え? 不定ではないけど…」とか思ってたりして。あう、あう。はい、
「*」を「*.」にしましたところ、直観からずれると思われていた command.com,
cmd.exe, ssed, egsed, mbsed, onigsed, yagrep, gawk, mawk32, tosfind のす
べてにおいて「拡張子なし」のファイルだけにマッチさせられました。32ビッ
ト・ツールを使うときにはこれでいきます。っていっても、拡張子のないファイ
ルつくらないし、それだけを選んで処理するということは、現実的にはなさそう
ですけどね。
 ま、人生長いので、これから先どうなるかなんて分かりません。転ばぬ先の、
ですね。多謝。m(__)m

2 / 13 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
14,005
(SS)C-BOARD v3.8 is Free