这样吧,给你全部写成函数,行数可能找到有多个,我为了简便把返回结果做成一个用竖线分割的字符串,如果想取它里面的值你可以用 split(STRING, "|") 得到一个数组。
Dim fileName
fileName="a.txt"
set fso=CreateObject("Scripting.FileSystemObject")
'获取行数
Function getLines(fileName)
Dim lines
lines=0
set f=fso.OpenTextFile(fileName)
While not f.AtEndOfStream
f.SkipLine()
lines=lines+1
Wend
f.Close()
set f=Nothing
getLines=lines
End Function
'得到指定行的字符串
Function getStringAtLine(fileName, lineNumber)
Dim str
set f=fso.OpenTextFile(fileName)
ON ERROR RESUME NEXT
For i=2 to lineNumber
f.SkipLine()
Next
str=f.Readline()
f.Close()
set f=Nothing
getStringAtLine=str
End Function
'得到指定字符串的行
Function getLineNumberOfString(fileName, str)
set f=fso.OpenTextFile(fileName)
Dim line,lines,tmpStr
line=1
lines=""
While not f.AtEndOfStream
If str=f.ReadLine() Then lines=lines&"|"&line
line=line+1
Wend
f.Close()
set f=Nothing
If lines="" Then
lines="没找到"
Else
lines="所有行编号"&lines
End If
getLineNumberOfString=lines
End Function
'得到包含指定字符串的行, ignoreCase 的值:true为不区分大小写,false区分。
Function getLineNumberContainsString(fileName, str, ignoreCase)
set f=fso.OpenTextFile(fileName)
Dim line,lines,tmpStr,regEx
line=1
lines=""
set regEx=New RegExp
regEx.pattern=".*"&str&".*"
regEx.IgnoreCase=ignoreCase
While not f.AtEndOfStream
If regEx.Test(f.ReadLine()) Then lines=lines&"|"&line
line=line+1
Wend
f.Close()
set f=Nothing
If lines="" Then
lines="没找到"
Else
lines="所有行编号"&lines
End If
getLineNumberContainsString=lines
End Function
msgbox "文件 "&fileName&vbcrlf&vbcrlf _
&"行数"&vbtab&getLines(fileName)&vbcrlf&vbcrlf _
&"第二行"&vbtab&getStringAtLine(fileName, 2)&vbcrlf&vbcrlf _
&"b所在"&vbtab&getLineNumberOfString(fileName, "b")&vbcrlf&vbcrlf _
&"包含b"&vbtab&getLineNumberContainsString(fileName, "b", True)