从VBScript中的text \ properties文件中提取用户名\密码

时间:2014-10-21 06:33:11

标签: sql-server file text vbscript

我试图从属性文件中提取用户名,密码,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

这种方法运行正常。但这只适用于我知道文件的确切结构的情况。如果我正在阅读的文件有一些变化怎么办?

1 个答案:

答案 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