我有一个以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...
我已经修改了这样的代码,并且能够提取两个时间戳之间的所有数据,但是文件大小是原始时间戳的两倍。我该怎么办?
答案 0 :(得分:-1)
让我们假设输入日志文件是按时间排序的。然后,您可以使用binary search从此处开始读取。您可以在到达时间窗晚于时间窗结束的时间戳记时结束循环循环。
要实现二进制搜索,您将必须以二进制模式(打开以读取二进制访问)打开文件。如果所有记录的长度相等,则可以使用 get 轻松读取时间戳。否则,只需使用 get 读取足够长的字符串,然后在 vbcrlf 处将其拆分即可获得一条记录。