あるフォルダ内の全てのファイルから、特定の文字列を含む行を検索して、
含まれる行が見つかればそれをリストボックスに追加していくというようなプログラム
を作りたいのですが、これでよいのか自信がありません。
何か問題があれば教えて下さい。
それと、もっときれいで速いやり方があれば教えて下さい。
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
よろしくお願いします。
ぬかってました。
Do Whileの後ろに
Not EOF(1)を追加します。
よろしくお願いします。
Grepを使って結果をファイル出力し、
それをListBoxに読み込むとか。
環境を書くのまで忘れていました、、、すみません。
Windows98SE,VB6.0sp6です。
Sayさんありがとうございます。
ちょっと分からないのですが、Grepを使うとはどういうことですか?
コマンドプロンプトからgrepとしても見つからないといわれますし、
MSDNライブラリでgrepとしても有意な情報が見つかりませんでした。
grepはOS標準のツールではないので適当なサイトから探して下さい。
もしWindows95系にもNT系と同様の findstr コマンドがあるならそれを使うという手も有りです。
findstr /C:"検索文字列" 指定フォルダ\*.* > files.txt
とでもして、files.txt の内容をListBoxに流し込めばOKです。
ファイルの文字列検索は結構需要が多いので、既存のツールも多数存在します。
プログラミングの勉強の意味で作るのなら話は別ですが、検索さえ出来ればそれで良いのなら、既存のツールを使う方が無駄な努力をしなくて済みます。
GREPはもともとUNIX上の文字列検索ツールです。
DOS/WIN版なら
http://computers.yahoo.co.jp/download/vector/win/util/text/find/
Dir, ChDrive, ChDir等を組み合わせて使えば、もっと簡単では?
皆様ありがとうございます。
今回はVBの勉強でこのようなものを作ろうと思った次第です。
なので外部ツールを使ってしまうのは遠慮したいです。
Win32APIも使わずVBのみで完結させてプログラムを組みたいのですが、
上記以外にもっと高速なやり方があれば教えてください。
>Aさん
参考にした本では、「Dirなどを使ったやり方は旧来のもので、
現在ではFileSystemObjectを使う」と書かれていました。
しかしオブジェクトを使うメリットについては一切触れられていませんでした。
FSOを使ったやり方には、従来のやり方に比べてどういった
メリットがあるのでしょうか?
何度もすみませんが、よろしくお願いします。
FileSystemObjectについては、あまり使ったことがないので、Dir関数のメリットとは断定できないのですが、
"*" や "?" (疑問符) のワイルドカード文字を使用してファイルを指定したり
ファイルの種類を指定したりできるので自分はよく使っているのですが...
FileSystemObjectは色々な情報を取得出来るって事位かな!?
でもDirなどよりも2倍(実行環境にもよる)ほど遅いですね。
詳しくHEROPA's HomePageさんのサイトに載ってあるので参考までに。
http://www31.ocn.ne.jp/~heropa/
>Sayさん
外部でgrepツールを使ったものとベンチして比べてみたら、愕然とするほど差がありました。
ただWindowsには基本的にgrepが搭載されていないようですので、やはりこのままでいこうと思います。
>ひろさん
Win98seにはfindstrコマンドはないみたいです。
>Aさん
FileSystemObjectでもワイルドカードは使えました。
>okuさん
ぼろくそに遅いみたいですね。とても参考になりました。
ありがとうございます。
みなさま、お世話になりました。
ツイート | ![]() |