我试图从属性文件中提取用户名,密码,sqlServer等字段的值。它可以类似于文本文件读取。 该文件的格式如下: ...
abcd.driverClassName=net.xyz.qwer.abcd.Driver
abcd.url=abcd:pqrs:sqlserver:sa
...
abcd.Username=Anant
abcd.Password=Password
所以我基本上使用 InStr()函数来查找Filed的位置(例如用户名)。然后将位置跳到实际密码开始的位置,并将其读入变量,直到找到换行符。
以下是示例代码:
...
Posusername = instr(1,strFile,"username",vbTextCompare)
'Wscript.Echo "Position of Username is: "&Posusername
Set ObjFile = ObjFso.openTextFile(StrFileName)
Objfile.skip(posusername-1)
Objfile.skip(9)
Do until objFile.AtEndOfLine
Username = ObjFile.Readline
Loop
ObjFile.close
...
现在这段代码在提取sqlServer,密码等时工作正常,但令人惊讶的是用户名..它只是存储下一行,即 abcd.Password =密码变量用户名 什么可能出错?请帮忙!
替代方法:
Do Until oTS.AtEndOfStream
sLine =Trim( oTS.ReadLine )
if "" <> sLine Then
If "abcd.user" = Left(Trim(sLine), 9 ) Then
username1=Split(sline,"=")
Exit Do
end if
end if
loop
username=Trim(username1(1))
msgbox "Username - " & username
这种方法运行正常。但这只适用于我知道文件的确切结构的情况。如果我正在阅读的文件有一些变化怎么办?
答案 0 :(得分:1)
使用regexp
:
Function testRegexP(strFile, FieldName)
Set re = New RegExp
re.Pattern = "\." + FieldName + "="
Set matches = re.Execute(strFile)
If matches.Count > 0 Then
Set match = matches(0)
msg = "Found match """ & match.Value & _
""" at position " & match.FirstIndex & vbCRLF
msgbox msg
testRegexP = match
Else
msgbox "No match"
testRegexP = "Nothing"
End If
End Function
FieldName
是您尝试查找的字段;例如&#34;用户名&#34 ;.您可以迭代要查找的字段列表,并为每个字段应用该函数:
Dim upBound = 5
Dim fieldList(5)
fieldList(0) = "Username"
fieldList(1) = "Password"
fieldList(2) = "IP"
For i = 0 to ( upBound - 1 ) Step 1
testRegexP(strFile, fieldList(i))
Next
编辑1:
如果要使用键存储找到的值,可以使用字典;在主代码中定义这样的字典:
Dim fieldDic
Set fieldDic = CreateObject("Scripting.Dictionary")
您还应该更改For
语句,如下所示,以存储函数testRegexP
的返回值:
Dim x
Dim fx
For i = 0 to ( upBound - 1 ) Step 1
x = fieldList(i)
fx = testRegexP(strFile, x)
fieldDic.Add x, fx
Next