grepの実行についてNo.16707
nogsig さん 04/02/16 09:20
 
はじめまして。nogsigと申します。

さて、秀丸v4.03の「grepの実行」を使用していて気づいたのですが、実行後、同じ
ファイルの同じ行が2重に出力されるようです。
verが古いからかと思い新しいのをダウンロードしてみたのですが、やはり結果が変
わりません。

状況は以下の通り。
・検索文字列:「ccf2fd」
・検索するファイル:「*.cgi;*.pl;*.asp;*.txt;*.js;*.htm;*.bas;*.jsp;*.css;*.
temp*」
・サブフォルダも検索にのみチェック
・実行結果
+-----------------------------------------------------
|blist.html(19):  background-color:#ccf2fd;
|input.html(20):  background-color:#ccf2fd;
|logon.html(19):  background-color:#ccf2fd;
|blist.html(19):  background-color:#ccf2fd;
|input.html(20):  background-color:#ccf2fd;
|logon.html(19):  background-color:#ccf2fd;
+-----------------------------------------------------

もしかしたら使い方が悪いだけでバグではないかもしれませんが、一応、ご報告させ
ていただきます。

[ ]
RE:16707 grepの実行についてNo.16713
秀まるお2 さん 04/02/16 16:32
 
 こちらで、Windows2000マシンとWindows98マシンの両方でテストした限りは、
二重にヒットする現象はうまく再現できませんでした。

 例えばですが、「*.htm;*.html」のように指定すると、「*.html」に相当する
ファイルが2重にヒットしてしまいます。これはこれで仕様ではあります。

 検索対象の「*.XXX」の部分を1つずつ取っていって、それで二重ヒットする
かしないかの境目が分かれば、具体的にどの「*.XXX」指定が重なってるかが分
かるんじゃないかと思います。それで重なった指定が何か今一度調べて欲しいで
す。

---------
 この辺の二重ヒットはユーザー様側で予測困難なので、やはり秀丸側で1重ヒ
ットするように修正した方がいいかもしれませんが…。一応、そういう仕様変更
をした方がいいんじゃないかということで、秀丸担当に要望を上げてだけおきま
す。

[ ]
RE:16707 grepの実行についてNo.16714
きいろいまふらあ さん 04/02/17 02:38
 
一介の秀丸ユーザのきいろいまふらあと申します。

秀まるお2さんの書かれたような、同一ファイルが二重にヒットするような拡張
子の指定をしているわけでないとしたら、以下のような可能性もあるかと思い、
差し出がましいようですがコメントさせていただきます。

>・サブフォルダも検索にのみチェック

ということなので、grepの対象になっているフォルダ配下(サブフォルダの中)
に、(ほとんど)同じファイルが複数存在するなんてことはないでしょうか?

例えば、c:\ 配下をgrepするときに、
c:\hogehoge\input.html
c:\mogemoge\input.html
という感じで同じ内容、同じファイル名の複数のファイルがあると

>|input.html(20):  background-color:#ccf2fd;

という行が2回出力されると思います。

試しに、grepのダイアログにある

□ファイル名をフルパスで出力

をチェックして実行してみれば、本当に同一のファイルに2回ヒットしているの
かわかると思います。

見当違いのことを書いているかもしれません。その節はご容赦を。

[ ]
RE:16714 grepの実行についてNo.16715
nogsig さん 04/02/17 08:35
 
秀まるお2さん、きいろいまふらあさん、どうもです。nogsigです。

>>・サブフォルダも検索にのみチェック
>
>ということなので、grepの対象になっているフォルダ配下(サブフォルダの中)
>に、(ほとんど)同じファイルが複数存在するなんてことはないでしょうか?
>
>例えば、c:\ 配下をgrepするときに、
>c:\hogehoge\input.html
>c:\mogemoge\input.html
>という感じで同じ内容、同じファイル名の複数のファイルがあると
>
>>|input.html(20):  background-color:#ccf2fd;
>
>という行が2回出力されると思います。
>

grepした環境を記入しなかったので、誤解を招いたかもしれませんが、今回、最下層
のフォルダを指定して実行しました。
この投稿後、「サブフォルダも検索のチェック」を外して実行したのですが、同じ結
果だったので、このチェックは無関係だとわかりました。

>試しに、grepのダイアログにある
>
>□ファイル名をフルパスで出力
>
>をチェックして実行してみれば、本当に同一のファイルに2回ヒットしているの
>かわかると思います。
「ファイル名をフルパスで出力」を指定すると以下のような結果になり同じファイル
の同じ行を見つけていることになっていると思います。
+---------------------------------------------------------
|C:\mypage\html\blist.html(19): background-color:#ccf2fd;
|C:\mypage\html\input.html(20): background-color:#ccf2fd;
|C:\mypage\html\logon.html(19): background-color:#ccf2fd;
|C:\mypage\html\blist.html(19): background-color:#ccf2fd;
|C:\mypage\html\input.html(20): background-color:#ccf2fd;
|C:\mypage\html\logon.html(19): background-color:#ccf2fd;
+---------------------------------------------------------

原因は、秀まるお2さんのおっしゃる通り、「*.html」と「*.*」の指定でダブって検
索していたからかもしれません。皆さん貴重なご意見ありがとうございました。

秀まるお2さんの投稿をみて思い出したのですが、拡張子の指定は、「*.htm」と指定
した場合、「*.htm」や「*.html」・「*.html_back」など「htm」で始まる拡張にヒ
ットしてしまうのは、よくわからないのですが仕様ですか。「*.htm」のみにヒット
させるにはどうすればよいのですか?

[ ]
RE:16715 grep…検索するファイルで『便乗No.16717
ぷれりゅ〜ど さん 04/02/17 10:57
 
nogsigさん、秀まるお2さん、こんにちは。
ぷれりゅ〜ど@ユーザです。

>秀まるお2さんの投稿をみて思い出したのですが、拡張子の指定は、「*.htm」と指
>定した場合、「*.htm」や「*.html」・「*.html_back」など「htm」で始まる拡張に
>ヒットしてしまうのは、よくわからないのですが仕様ですか。「*.htm」のみにヒッ
>トさせるにはどうすればよいのですか?

この部分にだけ反応…と言うか、私も疑問に思ったのですが、
検索するファイルに「*」が使えるのは分かってましたが、
「?」は使用不可なのでしょうか? 一文字指定の意味で。
例えば、検索するファイルを「*.ht?」とすれば「htm」以外の
(敢えて言えば)「*.hta」とかにも当たってしまうのは
仕方ないけど、nogsigさんの言う「*.htm」だけを検索するのは
可能かと思ってやってみたところ、htmと『html』にも当たりました(^^;
コレは仕様でしょうか? もしくはWindows固有制約ですかね?

ちなみに「htmとhtml」だけがWindows固有制約かと思いまして、
a.javとb.javaと言うファイルを作って、検索する対象に*.ja?と
しても同じ結果になりました(^^;

環境はWin2kSP4、IE6SP1、秀丸v4.05です。

[ ]
RE:16717 grep…検索するファイルで『便乗No.16719
ぷれりゅ〜ど さん 04/02/17 11:22
 
スミマセン、自己レスです(^^;

Windows固有のようですね、
cygwinで試すと、厳密な1文字に当たりますが、
どうもWinではダメみたいです。

先ほどの、a.htmとb.htmlを置いたフォルダで
コマンドプロンプト上で、dir *.h?mと叩いても、
b.htmlも表示されました(^^;
cygwinでやると、a.htmしか当たらないんですが。
ls *.ht?とやっても、a.htmしか当たりませんし。

お騒がせしました <(_ _)>

[ ]
RE:16717 grep…検索するファイルで『便乗No.16720
tnobu2 さん 04/02/17 11:24
 
>仕方ないけど、nogsigさんの言う「*.htm」だけを検索するのは
>可能かと思ってやってみたところ、htmと『html』にも当たりました(^^;
>コレは仕様でしょうか? もしくはWindows固有制約ですかね?

Windows自体の仕様だと思います。
コマンドプロンプトで、"dir /x"としてみると"xxx.html"などと書いた
ファイル名は拡張子が4文字になるためロングファイルネーム扱いとなり、
OSによって8文字+3文字のショートファイルネームも表示されます。
"xxx.html"は例えば"xxx.htm"という別名を持ったファイルとなるので、
"*.htm"にもヒットしてしまうのだと思います。

[ ]
RE:16720 grep…検索するファイルで『便乗No.16723
ぷれりゅ〜ど さん 04/02/17 14:33
 
tnobu2さん、こんにちは。
ぷれりゅ〜どです。

>Windows自体の仕様だと思います。
>コマンドプロンプトで、"dir /x"としてみると"xxx.html"などと書いた
>ファイル名は拡張子が4文字になるためロングファイルネーム扱いとなり、
>OSによって8文字+3文字のショートファイルネームも表示されます。
>"xxx.html"は例えば"xxx.htm"という別名を持ったファイルとなるので、
>"*.htm"にもヒットしてしまうのだと思います。

ありがとうございます。dirに「/x」なるオプションがあるのを
知りませんでした(^^; やってみたら、確かにそのように表示
され、b.javaと言うファイルは、b.javと出てました。
Windows固有の仕様では、秀丸側では何とも出来ないですね。

ありがとうございました <(_ _)>

[ ]
RE:16723 grep…検索するファイルで『便乗No.16726
秀まるお2 さん 04/02/17 18:18
 
 WindowsのFindFirst/FindNextという関数がそのような動作になっているよう
でして、こればっかりは秀丸で独自に対応すると、かえって混乱すると思います。

[ ]
RE:16726 grep…検索するファイルで『便乗No.16727
ぷれりゅ〜ど さん 04/02/17 18:36
 
秀まるお2さん、こんばんは。
ぷれりゅ〜どです。

> WindowsのFindFirst/FindNextという関数がそのような動作になっているよう
>でして、こればっかりは秀丸で独自に対応すると、かえって混乱すると思います。

Windowsの制約とのこと、ご回答ありがとうございました。
Windowsのデフォルト部分は、秀丸はじめ他のソフトでの
独自対応は結構です <(_ _)> 混乱を招きかねないとの
意見には大いに賛同できますので。

[ ]