• ベストアンサー

vbsでテキストファイル内の文字列検索

初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、VBSです。元のコードは、ちょっと違うようです。 '------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") 'Set WshShell = CreateObject("WScript.Shell") '?? Dim strSearchWord dim i '------------------------------------------- Public Const FileName ="C:\AAA.txt" Public Const sWord =""test" '------------------------------------------- Set tmpFile = WSHFso.OpenTextFile(FileName) Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine i = i + 1 nflg= fSearchWord (tmpLine) If nflg Then Exit Do Loop If nflg Then MsgBox i & "行目に" & sWord &"を含みます。",64 Else MsgBox sWord &"を含みませんでした。",48 End If '------------------------------------------- Function fSearchWord(tmpLine) Dim flg SearchWord = Split(tmpLine," ") For ix = LBound(SearchWord) To UBound(SearchWord) If Len(Trim(SearchWord(ix))) > 0 Then If InStr(1, SearchWord(ix), sWord, 1) > 0 Then flg = True Exit For End If End If Next fSearchWord = flg End Function '-------------------------------------------

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>テキストファイル内の文字列検索 検索だけなら配列に格納する必要は無いでしょう Set WSHFso = CreateObject("Scripting.FileSystemObject") Set tmpFile = WSHFso.OpenTextFile("G:\AAA.txt") Do Until tmpFile.AtEndOfStream i = i + 1 if InStr(tmpFile.ReadLine, "test")<>0 then WScript.Echo i & "行目 testを含みます。" Else WScript.Echo i & "行目 testを含みません。" End If Loop tmpFile.Close 配列内で処理をお望みならテキストファイル内の情報を一度に読み込んで 処理してみては Set WSHFso = CreateObject("Scripting.FileSystemObject") With WSHFso.OpenTextFile("G:\AAA.txt") buf = .ReadAll '全行読込み .Close 'ここでファイルを閉じる End With buf = Split(buf, vbCrLf) '改行で分割し配列を作成 For i =LBound(buf) to UBound(buf) if InStr(buf(i), "test")<>0 then WScript.Echo i + 1 & "行目 testを含みます。" else WScript.Echo i + 1 & "行目 testを含みません。" End If Next Set WSHFso = Nothing

回答No.1

Split関数にて、空白区切りの配列を作ってますが For ix = 0 To UBound(SearchWord) Next が抜けてませんか?

関連するQ&A