VBScript无法写入另一个文件的输出

时间:2013-09-24 09:50:22

标签: file text vbscript

我有一个这样的输入文件:

**********************************************************
* NAME           : CONTROLLER                                                          
* FUNCTION       : NOTHING IMPORTANT                                           
* BEGIN DATE     : 31/07/13                               
* TIME BEGIN     : 23.39.17.75                            
**********************************************************
* DATA INPUT READ  : 000000540                            
**********************************************************
* NAME           : CONTROLLER                                                          
* FUNCTION       : NOTHING IMPORTANT                                           
* BEGIN DATE     : 28/04/13                               
* TIME BEGIN     : 22.19.35.22                            
**********************************************************
* DATA INPUT READ  : 000008940                            
**********************************************************

我想要获取日期,时间和数据,然后移动另一个格式如下的输出文件:

31/07/13  23.39.17.75  000000540
28/04/13  22.19.35.22  000008940

到目前为止,我试过:EDITED

Const ForReading = 1
Const ForWriting = 2
Dim objFSO 'File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim objInputTS 'Text Stream Object
Set objInputTS = objFSO.OpenTextFile("D:\Desktop\input.txt", ForReading, False)
Dim objOutputTS 'Text Stream Object
Set objOutputTS = objFSO.OpenTextFile("D:\Desktop\output.txt", ForWriting, True)



 Do Until objInputTS.AtEndOfStream
    Dim strLine
    strLine = objInputTS.ReadLine()

    c1 = "* BEGIN DATE"
    'WScript.Echo Len(c1)
    c2 = "* BEGIN DATE"
    'WScript.Echo Len(c2)
    c3 = "* DATA INPUT READ"
    'WScript.Echo Len(c3)

    If (Instr(strLine, 13) = "BEGIN DATE") Then objOutputTS.WriteLine(Mid(strLine, 20))

    If (Instr(strLine, 13) = "TIME BEGIN") Then objOutputTS.WriteLine(Mid(strLine, 20))

    If (Instr(strLine, 18) = "DATA INPUT READ") Then objOutputTS.WriteLine(Mid(strLine, 22)) 
Loop

objOutputTS.Close()
objInputTS.Close()

但是在我的output.txt文件中没有出现任何内容。我认为问题是*,但我不知道。我试着各方面。我找不到出路。我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

尝试更换:

If (Left(strLine, 12) = "* BEGIN DATE ") ...

If Instr(strLine, "BEGIN DATE") then
   strLineSplit = Split(strLine, ":")
   objOutputTS.WriteLine(Trim(strLineSplit(1)))
end if

或者这种效果。

编辑:

在你的循环中:

Dim beginDate, endDate, dataInputRead 

strLine = objInputTS.ReadLine()

If Instr(strLine, "BEGIN DATE") then
    strLineSplit = Split(strLine, ":")
    beginDate = Trim(strLineSplit(1))
end if

If Instr(strLine, "END DATE") then
    strLineSplit = Split(strLine, ":")
    endDate = Trim(strLineSplit(1))
end if

If Instr(strLine, "DATA INPUT READ") then
    strLineSplit = Split(strLine, ":")
    dataInputRead = Trim(strLineSplit(1))
    objOutputTS.WriteLine(beginDate & " " & endDate & " " & dataInputRead & Chr(13) & Chr(10))
end if

答案 1 :(得分:0)

您的Left(strLine, 12)永远不能等于长度为13的字符串:

>> c1 = "* BEGIN DATE "
>> WScript.Echo Len(c1)
>>
13

WRT评论:

首先,你必须学会​​计算:

>> WScript.Echo """" & Mid(s1, 21) & """"
>>
"1/07/13"

然后你应该在你的脚本中加入一些诊断输出来检查你的假设,例如

WScript.Echo """" & Left|Mid(strLine, <decent number>) & """"

WRT编辑:

 If (Instr(strLine, 13) = "BEGIN DATE") Then

将长度为13的字符串与“BEGIN DATE”进行比较 - 长度为10,没有“*”前缀。