使用VBA从日志文件或文本文档中提取两个字符串(时间间隔)之间的数据

时间:2018-12-31 14:18:21

标签: excel vba text-files logfile

我有一个以MB为单位的日志文件,我只需要提取一个特定小时的数据并排除其余数据。

我尝试通过使用时间戳复制日志文件中的每一行来实现这一目标,并且可以使用时间戳来提取数据,但是当日志文件中记录了异常时,我无法捕获它,因为它不是在所有行中都有时间戳。我也需要。

.Value()

用于逐行提取带有时间戳的数据的代码

我需要从日志文件中获取1小时的数据,并将其保存在文本文档中。

有人可以帮我吗?

示例日志文件

Do Until FileIn.AtEndOfStream
    strTmp = FileIn.ReadLine
    If Len(strTmp) > 0 Then
        If (InStr(1, strTmp, Date & " " & LastHour, vbTextCompare) > 0) Then
            Fileout.WriteLine strTmp
        End If
    End If
Loop
2019-01-02 00:54:08,886 [117] ERROR [(null)] - 
************START***************** Application Exception 2019-01-02 12:54:08 AM*****************************   


ERROR CODE             :::::: acdefba1-fdfc-4cef-bah5-082bjdbdd9e

System.NullReferenceException: Object reference not set to an instance of an object.
   at DynamicModule.ns.Wrapped_IDeliveryModelService_bc245ed8140c4a49aeaf2e2b7c9c7578.UpdateCart(FXCContextctx)  

*************END******************* Application Exception 2019-01-02 12:54:08 AM*************************  

2019-01-02 00:54:08,965 [95] DEBUG...  2019-01-02 01:01:08,965 [95] DEBUG...  2019-01-02 01:01:08,965 [95] DEBUG...

我已经修改了这样的代码,并且能够提取两个时间戳之间的所有数据,但是文件大小是原始时间戳的两倍。我该怎么办?

1 个答案:

答案 0 :(得分:-1)

让我们假设输入日志文件是按时间排序的。然后,您可以使用binary search从此处开始读取。您可以在到达时间窗晚于时间窗结束的时间戳记时结束循环循环。

要实现二进制搜索,您将必须以二进制模式(打开以读取二进制访问)打开文件。如果所有记录的长度相等,则可以使用 get 轻松读取时间戳。否则,只需使用 get 读取足够长的字符串,然后在 vbcrlf 处将其拆分即可获得一条记录。