複数ファイルから特定文字列を一括検索

解決


くらって  2004-09-30 00:09:55  No: 116627

あるフォルダ内の全てのファイルから、特定の文字列を含む行を検索して、
含まれる行が見つかればそれをリストボックスに追加していくというようなプログラム
を作りたいのですが、これでよいのか自信がありません。
何か問題があれば教えて下さい。
それと、もっときれいで速いやり方があれば教えて下さい。
Dim fso As Object, fsofolder As Object, fsofiles As Object, fsofile As Object
Dim strbuf As String, strsearch As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsofolder = fso.GetFolder("c:\test\")
Set fsofiles = fso.folder.Files
For Each fsofile In fsofiles
    Open "c:\test\" & fsofile.Name For Input As #1
      Do While
        Line Input #1, strbuf
        If InStr(strbuf, strsearch)
          List1.list AddItem
        End If
      Loop
    Close #1
Next
Set fso = Nothing,
Set fsofolder = Nothing
Set fsofiles = Nothing
Set fsofile = Nothing
よろしくお願いします。


くらって  2004-09-30 00:11:24  No: 116628

ぬかってました。
Do Whileの後ろに
Not EOF(1)を追加します。
よろしくお願いします。


Say  2004-09-30 07:02:28  No: 116629

Grepを使って結果をファイル出力し、
それをListBoxに読み込むとか。


くらって  2004-09-30 17:37:58  No: 116630

環境を書くのまで忘れていました、、、すみません。
Windows98SE,VB6.0sp6です。
Sayさんありがとうございます。
ちょっと分からないのですが、Grepを使うとはどういうことですか?
コマンドプロンプトからgrepとしても見つからないといわれますし、
MSDNライブラリでgrepとしても有意な情報が見つかりませんでした。


ひろ  2004-09-30 22:05:01  No: 116631

grepはOS標準のツールではないので適当なサイトから探して下さい。

もしWindows95系にもNT系と同様の findstr コマンドがあるならそれを使うという手も有りです。

 findstr /C:"検索文字列" 指定フォルダ\*.* > files.txt

とでもして、files.txt の内容をListBoxに流し込めばOKです。

ファイルの文字列検索は結構需要が多いので、既存のツールも多数存在します。
プログラミングの勉強の意味で作るのなら話は別ですが、検索さえ出来ればそれで良いのなら、既存のツールを使う方が無駄な努力をしなくて済みます。


Say  2004-09-30 22:12:10  No: 116632

GREPはもともとUNIX上の文字列検索ツールです。
DOS/WIN版なら
http://computers.yahoo.co.jp/download/vector/win/util/text/find/


A  2004-09-30 23:31:06  No: 116633

Dir, ChDrive, ChDir等を組み合わせて使えば、もっと簡単では?


くらって  2004-10-01 02:05:33  No: 116634

皆様ありがとうございます。
今回はVBの勉強でこのようなものを作ろうと思った次第です。
なので外部ツールを使ってしまうのは遠慮したいです。
Win32APIも使わずVBのみで完結させてプログラムを組みたいのですが、
上記以外にもっと高速なやり方があれば教えてください。

>Aさん
参考にした本では、「Dirなどを使ったやり方は旧来のもので、
現在ではFileSystemObjectを使う」と書かれていました。
しかしオブジェクトを使うメリットについては一切触れられていませんでした。
FSOを使ったやり方には、従来のやり方に比べてどういった
メリットがあるのでしょうか?

何度もすみませんが、よろしくお願いします。


A  2004-10-01 02:33:53  No: 116635

FileSystemObjectについては、あまり使ったことがないので、Dir関数のメリットとは断定できないのですが、
"*" や "?" (疑問符) のワイルドカード文字を使用してファイルを指定したり
ファイルの種類を指定したりできるので自分はよく使っているのですが...


oku  URL  2004-10-01 08:49:44  No: 116636

FileSystemObjectは色々な情報を取得出来るって事位かな!?
でもDirなどよりも2倍(実行環境にもよる)ほど遅いですね。
詳しくHEROPA's HomePageさんのサイトに載ってあるので参考までに。
http://www31.ocn.ne.jp/~heropa/


くらって  2004-10-01 23:41:26  No: 116637

>Sayさん
外部でgrepツールを使ったものとベンチして比べてみたら、愕然とするほど差がありました。
ただWindowsには基本的にgrepが搭載されていないようですので、やはりこのままでいこうと思います。

>ひろさん
Win98seにはfindstrコマンドはないみたいです。

>Aさん
FileSystemObjectでもワイルドカードは使えました。

>okuさん
ぼろくそに遅いみたいですね。とても参考になりました。
ありがとうございます。

みなさま、お世話になりました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加