gooドクター有料プランが1ヶ月間無料!

初心者です。

テキストファイルを指定し、含まれる文字列を検索し、
結果表示したいと考えております。

色々探して、以下で作成したのですが、
うまく動いてくれません。

出来ましたら、テキストファイルの中の文字列の
一部分を指定して動作させたいと思っております。

どなたかご教示のほど宜しくお願い致します。


----------------------------------------------------

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


----------------------------------------------------

gooドクター

A 回答 (3件)

こんにちは。



コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、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
'-------------------------------------------
    • good
    • 0

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


検索だけなら配列に格納する必要は無いでしょう

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
    • good
    • 0

Split関数にて、空白区切りの配列を作ってますが



For ix = 0 To UBound(SearchWord)

Next

が抜けてませんか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング