J'essaie d'effectuer une recherche dans des fichiers journaux volumineux afin de trouver une chaîne de texte, puis, si cette chaîne est présente, de trouver une autre chaîne de texte et enfin de renvoyer les 5 lignes de données suivantes. J'ai réussi à rechercher la chaîne de caractères dans le fichier texte et à renvoyer les 5 lignes suivantes, mais je ne parviens pas à faire en sorte que la macro recherche les deux lignes de texte avant de renvoyer les 5 lignes.
Par exemple, si le fichier texte ressemble à ceci :
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
Je veux extraire les 5 lignes après le premier "CalcDelCharge", car elles suivent "PrintInvoice : 2", qui est l'une des chaînes que je veux également rechercher.
Le fichier texte contient "CalcDelCharge" partout, mais je ne suis intéressé que par les cas où il vient après "PrintInvoice : 2", qui apparaît beaucoup moins souvent.
Voici ce que j'ai jusqu'à présent
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
Cela va extraire 5 lignes après tous les 'CalcDelCharge' et les mettre dans une feuille de calcul pour moi, je n'ai pas été en mesure de le réduire aux instances où il suit 'PrintInvoice : 2'.
Toute aide serait grandement appréciée.
Merci.