2017-03-02 99 views
0

我想檢查字符串的txt文件。 如果字符串不存在,它會從key.txt中獲取一個數字並將其寫入另一個文件中。這部分工作正常。vbscript - 無法從文本文件中提取數字

但是,當找到字符串時,我想將前五個字符讀入一個變量並將此變量用於創建xml。當我運行我的腳本和字符串被發現.... xml元素鍵是空的...

任何人都可以幫助我嗎?由於

Dim FSSys, Reference, corp, Account, intCorp, strPK, FS 
Set FSSys = Wscript.CreateObject("Scripting.FileSystemObject") 
Set Reference = FSSys.OpenTextFile("C:\corpreferenz.txt") 
intCorp = Reference.ReadAll 
Reference.Close 

intCorp = intCorp + 1 

Set corp = FSSys.CreateTextFile("C:\corpreferenz.txt") 
corp.Write intCorp 
corp.Close 

Const FORREADING = 1 
Const FORWRITING = 2 
Const FORAPPENDING = 8 

Dim sToSearch: sToSearch = "Test" 
Dim sFileName: sFileName = "C:\Account.txt" 
Dim sContent, Found, TxtFile 

If Not FSSys.FileExists(sFileName) Then 
    MsgBox "File Not Found" 
    WScript.Quit 0 
End If 

Set TxtFile = FSSys.OpenTextFile(sFileName,FORREADING) 
sContent = TxtFile.ReadAll 

If InStr(sContent,sToSearch) Then 
    Found = True 
    while not TxtFile.AtEndOfStream 
     sTemp = TxtFile.ReadLine 
     If Instr(1,sTemp,sToSearch)>0 then 
      strPK = strPK + sTemp 
      FS = Left(strPK, 5) 
     End If 
    Wend 
End If 


Set TxtFile = Nothing 

If Not Found Then 
    Set PKNumber = FSSys.OpenTextFile("C:\Key.txt") 
    intPKNumber = PKNumber.ReadAll 
    PKNumber.Close 
    intPKNumber = intPKNumber + 1 
    Set PKNum = FSSys.CreateTextFile("C:\Key.txt") 
    PKNum.Write intPKNumber 
    PKNum.Close 
    FS = intPKNumber 
    Set TxtFile = FSSys.OpenTextFile(sFileName,FORAPPENDING) 
    TxtFile.WriteLine intPKNumber & " " & sToSearch 
End If 


'Create XML 
set xml = CreateObject("Microsoft.XMLDOM") 
set encoding = xml.createProcessingInstruction("xml", "version='1.0'") 
xml.insertBefore encoding, xml.childNodes.Item(0) 
set foo = xml.createElement("XML") 
set bar = xml.createElement("Table") 
set corp = xml.createElement("Corp") 
set cdata = xml.createCDATASection(intCorp) 
set konto = xml.createElement("Key") 
set cdata1 = xml.createCDATASection(FS) 
corp.appendChild cdata 
bar.appendChild corp 
konto.appendChild cdata1 
bar.appendChild konto 
foo.appendChild bar 
xml.appendChild(foo) 

xmlSave xml, "C:BUP.xml" 

'Function for XML 
function xmlSave(xml, filename) 
    set rdr = CreateObject("MSXML2.SAXXMLReader") 
    set wrt = CreateObject("MSXML2.MXXMLWriter") 
    Set oStream = CreateObject("ADODB.STREAM") 
    oStream.Open 
    oStream.Charset = "ISO-8859-1" 

    wrt.indent = True 
    wrt.encoding = "ISO-8859-1" 
    wrt.output = oStream 
    Set rdr.contentHandler = wrt 
    Set rdr.errorHandler = wrt 

    rdr.Parse xml 
    wrt.flush 

    oStream.SaveToFile filename, 2 
end function 

回答

0

sContent = TxtFile.ReadAll 

你(讀指針)是在文件的結尾; TxtFile.AtEndOfStream爲真,並且TxtFile.ReadLine將不會被調用/會失敗。證據:

>> Set f = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.ScriptFullName) 
>> WScript.Echo 0, CStr(f.AtEndOfStream) 
>> s = f.ReadAll() 
>> WScript.Echo 1, CStr(f.AtEndOfStream) 
>> 
0 Falsch (False) 
1 Wahr (True) 

你可以遍歷文件的行(上vbCrLf斯普利特()sContent),或 - 更好 - 使用上sContent一個正則表達式來提取所需要的數據。

+0

謝謝你的幫助。 我還沒有意識到指針在最後......我解決了這個問題! – Silence