- ベストアンサー
VBでファイル内文字列の検索
VB2010で拡張子なしのファイル複数個から 検索した文字列が含まれているファイルを見つけだしたいのですが どのように作るのがベストでしょうか? できれば拡張子にtxtをつけて開くような変換は行わずにしたいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
検索がテキストベースのファイルならVBにしなくても エクスプローラでもバッチファイルでもできる。 以下バッチファイル参照。(必要な主な部分を抜粋) SET CH=%1 :TOP IF "%2" == "" GOTO EXT FOR %%F IN ( %2 ) DO C:\WINDOWS\COMMAND\FIND.EXE /N /I "%CH%" %%F >> C:\SEARCH.LST SHIFT GOTO TOP :ERR GOTO END :EXT :END ファイル名をFI.BATとしたバッチファイル。 「FI 検索文字列 検索ファイル・・・」 【使用例】 FI.BAT WIN C:\TEMP C:\WK D:\SOURCE\*.BAS 【機能】 "WIN"文字列を "C:\TEMP" "C:\WK" "D:\SOURCE\*.BAS" 3つのフォルダ内で検索し見つかったら テキストファイルへ書きだす。 指定フォルダはいくつでも可能。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17070)
コンソールアプリケーションを選んで Module Module1 Sub Main() Dim p As Double Dim strt ' Read the information into a single string Dim objReader As New System.IO.StreamReader("C:\Documents and Settings\XXXX\My Documents\aaa6.txt") Dim fileString As String = objReader.ReadToEnd() MsgBox(fileString) strt = 1 Do p = InStr(strt, fileString, ",") MsgBox(p) strt = p + 1 Loop While p <> 0 objReader.Close() objReader.Dispose() End Sub End Module をやってみると,旨くカンマの位置を示してくれるようだ。 上記のキモはReadToEndを使って、レコードごと(細切れ)の捕捉を避けていること。 ファイル名をその都度変えて、繰り返せば、10個程度のファイルなら使えるのではないか。 「ただ拡張子なしのファイル」で旨くいくかどうか判らないが、そのフォルダの中でユニークな名前なのだろうから、 また内容は文字列ならうまく行くのではないか。 また1ファイル全体で入力バッファーの制限長を越えたファイルでなければ良いが。
- piroin654
- ベストアンサー率75% (692/917)
vb2010環境ではないので使えるか確認はしていませんが。 Dim fileName As String For Each fileName In System.IO.Directory.GetFiles(フォルダ名) If Microsoft.VisualBasic.InStrRev(fileName,".") = 0 Then 処理 End If Next InstrRevが使えなければ、fileName.LastIndexOf(".") If fileName.LastIndexOf(".") = 0 Then
- layy
- ベストアンサー率23% (292/1222)
手で選択でなく、ファイルを特定するところからプログラム、自動化したいならフォルダ決めはどうするか。ソース埋め込みでもINIファイルでもダイアログでもよい。 ダイアログでもファイルが移動してもプログラム修正しなくてよい。それはそれでメリットあります。 ファイル一覧のテキストファイルをVBから作成し、拡張子あれば何もしない、拡張子なければ検索ロジックを実行でもよい。 検索して見つかったらそのファイル一覧にバイト位置追記でも良い。 1ファイルに複数あっても追記すれば良い。 何がベストか?と言われても何に対して、がわからない。個人差あります。 質問の背景わからず。今どんな感じだから改善したい、のならわかる。 また、やり方いろいろを提示したら終わりか作って欲しいレベルか不明。具体的要件まで提示しないと逆質問になりすぐには作れませんがー。
- layy
- ベストアンサー率23% (292/1222)
ファイルパスとファイル名が格納してあるテキストファイルがあれば、それ1行読み込みオープン、終わると次のファイルを読み込む、の繰り返し。 ファイルは決まっているか?。 やり方はいろいろある。
- layy
- ベストアンサー率23% (292/1222)
確認。 見つかればよいだけなら、エクスプローラほか既存ソフトで出来そうだが、プログラムということか。 見つかるとどうしたい?。あるなしだけかバイト位置も知りたいか。ファイルはあるフォルダ1つにあるか。等不明。 ファイルについては複数ファイル選択可能なダイアログを使う。使い方事例多数。 その1ファイルについて検索する。終わると次のファイル。 読み込むにはバッファ使うか1行ずつか1バイトずつか。 どこに悩んでいますか。
補足
出来ればバイト位置がわかれば良いです。 ファイル格納ディレクトリは一定なのでその中から見つけだせれば 良いのですがダイアログを使うというのは手動でファイルを選択する ということでしょうか?
補足
ファイルは決まっています。1つのディレクトリ内の拡張子なしのファイルです。