【发布时间】:2017-11-16 12:48:41
【问题描述】:
我正在尝试搜索大型日志文件以查找文本字符串,然后如果该字符串存在以查找另一个文本字符串,然后返回接下来的 5 行数据。我已经设法在文本文件中搜索字符串并返回 5 行,但是我似乎无法让宏在返回 5 行之前搜索两行文本。
例如,如果文本文件如下所示:
17:42:56: Log File Closed
17:42:56: PrintInvoice: 2
17:42:56: copyReportData:
17:42:56: getNextRptDataID:
17:42:58: CalcDelCharge:
17:42:58: Sub Total: 3.80
17:42:58: Del Total: 0.00
17:42:58: Disc Total: 0.00
17:42:58: Vat Total: 0.00
17:42:58: Inv Total: 3.80
18:33:00: CalculateAmtDue:
18:33:00: CalculateChange:
18:33:00: UpdateDelCharge:
18:33:00: UpdateTotals
18:42:58: CalcDelCharge:
18:42:58: Sub Total: 5.80
18:42:58: Del Total: 0.00
18:42:58: Disc Total: 0.00
18:42:58: Vat Total: 0.00
18:42:58: Inv Total: 5.80
我想提取第一个 'CalcDelCharge' 之后的 5 行,因为它跟在 'PrintInvoice: 2' 之后,这是我也想搜索的字符串之一。
文本文件自始至终都包含“CalcDelCharge”,但我只对出现在“PrintInvoice: 2”之后的实例感兴趣,它出现的频率要低得多。
这是我目前所拥有的
Dim fn As String, txt As String, delim As String, a() As String
Dim i As Long, ii As Long, iii As Long, x, y
fn = "C:\Documents\tilllogfile.log"
delim = vbTab
temp = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll
x = Split(temp, vbCrLf)
ReDim a(1 To UBound(x) + 1, 1 To 100)
For i = 0 To UBound(x)
If InStr(1, x(i), "CalcDelCharge", 1) Then
For ii = 0 To 5
n = n + 1: y = Split(x(i + ii), delim)
For iii = 0 To UBound(y)
a(n, iii + 1) = y(iii)
Next
Next
End If
这将在所有 'CalcDelCharge' 之后提取 5 行并将其放入电子表格中,我无法将其缩小到跟随 'PrintInvoice: 2' 的实例。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: excel string vba text-files text-extraction