我正在尝试从查询设备后更新的文本文件中提取一些信息。文本文件包含如下所示的行(缩写):
05-Nov-13 11:11:54.3496 ( -1 7020 10244) scpeng.exe:Automation Server...
05-Nov-13 14:10:54.3496 ( -1 7020 10244) scpeng.exe:Automation Server...
05-Nov-13 14:10:54.3496 ( -1 7020 10244) scpeng.exe:Automation Server...
05-Nov-13 14:10:56.3496 ( -1 7020 10244) scpeng.exe:CServer.cpp,....
文本文件最多可包含数周的信息。我有一个子程序,在我查询应该允许回复的设备后几秒钟运行,并且适用的行存在于文本文件中。在例程中,我试图滚动检查日期的行,以到达子程序调用的日期,然后是时间(或当前时间之前约10秒)到达与之相关的行。可以找到信息。
do
msg = msgstream.ReadLine
logdate = mide(msg,1,9)
logday = Cdate(logdate)
loop while logday < date
do
msg = msgstream.Readline
logtime = mid(msg,12,8)
'logtime = CDate(logtime) This mod is not working
loop while logtime < time
日期循环似乎有效,但是时间给了我问题。它没有错误,但我无法让它超越一行文本。任何人都可以建议修复或更好的选择?我已经读过内置的Date函数可以包含时间,但我不相信我正在使用的这个版本。此外,文本文件包含24小时格式的时间,我相信时间函数以12小时格式返回值,即“12:43:27 PM ST”。
答案 0 :(得分:2)
你这样做太复杂了。只需将整个日期字符串解析为日期时间值:
refdate = Now
Do
msg = msgstream.ReadLine
logdate = CDate(Mid(msg, 1, 19))
Loop While logdate < refdate
您可以稍后从值中提取日期和时间部分,例如像这样:
WScript.Echo DateValue(logdate)
WScript.Echo TimeValue(logdate)
此外,Time
返回当前(未格式化的)系统时间。它是以12小时还是24小时格式显示取决于系统的区域设置。但是,您始终可以使用Hour
函数获取小时(0-23)。
答案 1 :(得分:0)
使用正则表达式解析每一行以获得正确的日期和时间部分。我更喜欢上面的字符串操作函数的正则表达式,因为你可以分离格式和代码。
从这两个部分重新组合日期,并查看此时的日期是否小于昨天。
Option Explicit
dim strTest, re, matches, myDatePart, myTimePart, logDate
' teststring
strTest = "08-Nov-13 14:10:56.3496 ( -1 7020 10244) scpeng.exe:CServer.cpp,...."
Set re = new regexp
' This pattern extracts two part, the date as (dd-www-dd) and the time as (hh:mm:ss)
re.pattern = "(\d{2}-\w{3}-\d{2}) +(\d{2}:\d{2}:\d{2})"
Set matches = re.Execute(strTest)
' Get the first and second submatch to define the date and time
myDatePart = matches(0).submatches(0)
myTimePart = matches(0).submatches(1)
' datevalue and timevalue automatically tranforms to Date type
logDate = datevalue(myDatePart) + timevalue(myTimePart)
' See if the date is smaller than yesterday exactly this time
msgbox (logDate < (DateAdd("d", -1, now))) ' Returns True, because 08 Nov is earlier than yesterday.