VB脚本 - 比较时间值,一个来自文本文件?

时间:2013-11-18 14:28:51

标签: date time vbscript

我正在尝试从查询设备后更新的文本文件中提取一些信息。文本文件包含如下所示的行(缩写):

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”。

2 个答案:

答案 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.