我有一个这样的输入文件:
**********************************************************
* 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文件中没有出现任何内容。我认为问题是*
,但我不知道。我试着各方面。我找不到出路。我的代码有什么问题?
答案 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,没有“*”前缀。