|
lisyofun
初级用户
积分 87
发帖 61
注册 2008-9-18
状态 离线
|
『楼 主』:
请问怎么获得指定字符串的行数(VBS)
一个文本如下:
a
b
c
我想查找b然后就返回2.
请问有专门的函数么?
|
|
2009-8-30 13:13 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
2 楼』:
没有专门函数。
假设你的文本文件叫做 “a.txt”
Const LINE_NUM=2
Const STRING_VALUE="b"
Dim fileName,lines,str,line
fileName="a.txt"
set fso=CreateObject("Scripting.FileSystemObject")
'获取行数
lines=0
set f=fso.OpenTextFile(fileName)
While not f.AtEndOfStream
f.SkipLine()
lines=lines+1
Wend
f.Close()
set f=Nothing
'得到指定行的字符串
set f=fso.OpenTextFile("a.txt")
ON ERROR RESUME NEXT
For i=2 to LINE_NUM
f.SkipLine()
Next
str=f.Readline()
f.Close()
set f=Nothing
'得到指定字符串的行
set f=fso.OpenTextFile("a.txt")
line=1
ON ERROR RESUME NEXT
While not STRING_VALUE=f.ReadLine()
line=line+1
Wend
f.Close()
set f=Nothing
msgbox "文本文件 "&fileName&" 的总行数为 "&lines&vbcrlf&vbcrlf&"第 "&LINE_NUM&" 行的字符串为 "&str&vbcrlf&vbcrlf&"字符串 "&STRING_VALUE&" 所在的行是 "&line [ Last edited by qinchun36 on 2009-8-30 at 23:08 ]
|
|
2009-8-30 22:50 |
|
|
lisyofun
初级用户
积分 87
发帖 61
注册 2008-9-18
状态 离线
|
『第
3 楼』:
谢谢你,对我很有帮助,但是不好意思,我忘了说详细,如果字符串是包含在某一行中,要读取其所在的行数,那应该怎么写呢?
a
bsfd
c
也是查找b返回2
|
|
2009-8-30 23:25 |
|
|
s11ss
银牌会员
积分 2098
发帖 566
注册 2007-9-11
状态 离线
|
『第
4 楼』:
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile("a.txt")
Do Until oFile.AtEndOfStream
iLine = oFile.Line
If InStr(oFile.ReadLine(), "b") <> 0 Then _
WSH.Echo iLine
Loop
|
|
2009-8-31 02:01 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
5 楼』:
这样吧,给你全部写成函数,行数可能找到有多个,我为了简便把返回结果做成一个用竖线分割的字符串,如果想取它里面的值你可以用 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)
|
|
2009-8-31 02:02 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
6 楼』:
Const file = "fds.cmd" '要查找的文件
Const fstr = "eof" '要查找的字符串
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set ffo = fso.OpenTextFile(file,1)
Do Until(InStr(1,LCase(ffo.ReadLine),fstr))
DstLine = ffo.Line
Loop
msgbox DstLine
|
49206C6F766520796F752067757973 54656C3A3133383238343036373837 |
|
2009-8-31 02:24 |
|
|
lotus516
高级用户
论坛上抢劫的
积分 551
发帖 246
注册 2006-9-21
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by everest79 at 2009-8-31 02:24:
[code]
Const file = "fds.cmd" '要查找的文件
Const fstr = "eof" '要查找的字符串
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
... |
|
要查找的字符串是用另一个文本保存,且有多个情况下,怎么改啊!
|
|
2009-8-31 08:07 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by lotus516 at 2009-8-31 08:07 AM:
要查找的字符串是用另一个文本保存,且有多个情况下,怎么改啊! |
|
Const file = "fds.cmd" '要查找的文件
Const fstr = "cker.txt" '要查找的字符串集
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set ffo = fso.OpenTextFile(file,1)
Set fko = fso.OpenTextFile(fstr,1)
Do Until fko.AtEndOfStream
str = fko.ReadLine
Do Until(InStr(1,LCase(ffo.ReadLine),str))
DstLine = ffo.Line
Loop
msgbox str & "is" & DstLine
Loop
|
49206C6F766520796F752067757973 54656C3A3133383238343036373837 |
|
2009-9-2 07:48 |
|
|
lisyofun
初级用户
积分 87
发帖 61
注册 2008-9-18
状态 离线
|
『第
9 楼』:
谢谢各位大侠。。努力学习吸收中。。
|
|
2009-9-3 04:39 |
|