0

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

**********************************************************
* 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

到目前为止,我尝试过:已编辑

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 文件中什么也没有出现。我认为问题是*,但我不知道。我尝试了各种方式。我找不到出路。我的代码有什么问题?

4

2 回答 2

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
于 2013-09-24T10:04:47.057 回答
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,没有“*”前缀。

于 2013-09-24T09:59:13.020 回答