gpt4 book ai didi

excel - 用于搜索字符串,然后搜索第二个字符串并从文本文件返回数据行的 VBA 代码

转载 作者:行者123 更新时间:2023-12-02 21:20:54 25 4
gpt4 key购买 nike

我正在尝试搜索大型日志文件以查找文本字符串,然后如果该字符串存在,则查找另一个文本字符串,然后返回接下来的 5 行数据。我已经设法在文本文件中搜索字符串并返回 5 行,但是我似乎无法让宏在返回 5 行之前搜索两行文本。

例如,如果文本文件如下所示:

17:42:56:日志文件已关闭
17:42:56:打印发票:2
17:42:56:复制报告数据:
17:42:56:获取NextRptDataID:
17:42:58:计算删除电荷:
17:42:58:小计:3.80
17:42:58:德尔总数:0.00
17:42:58:光盘总数:0.00
17:42:58:增值税总计:0.00
17:42:58:库存总计:3.80
18:33:00:计算应付款:
18:33:00:计算变化:
18:33:00:更新DelCharge:
18:33:00:更新总计
18:42:58:计算删除电荷:
18:42:58:小计:5.80
18:42:58:德尔总数:0.00
18:42:58:光盘总数:0.00
18:42:58:增值税总计:0.00
18:42:58:库存总计:5.80

我想提取第一个“CalcDelCharge”之后的 5 行,因为它位于“PrintInvoice: 2”之后,这也是我想要搜索的字符串之一。

文本文件自始至终都包含“CalcDelCharge”,但我只对“PrintInvoice: 2”之后出现的实例感兴趣,而“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”后面的实例。

任何帮助将不胜感激。

谢谢。

最佳答案

声明 bool 变量来告诉宏是否找到了您的文本

Dim boolFound As Boolean

在最外部的循环中添加第一个测试:

For i = 0 To UBound(x)
If InStr(1, x(i), "PrintInvoice: 2", 1) Then
boolFound = True
End If

在第二个测试中添加条件:

If InStr(1, x(i), "CalcDelCharge", 1) And boolFound Then

复制五行后,不要忘记将 boolFound 更改为 false:

    boolFound = False
End If

关于excel - 用于搜索字符串,然后搜索第二个字符串并从文本文件返回数据行的 VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com