lenzmann
Goto Top

LOGDATEI DURCHSUCHEN UND DARAUFFOLGENDE ZEILEN KOPIEREN

Bin ein blutiger Anfänger und für jede Hilfe sehr froh.

Habe verschiedene Logfiles, welche unterschiedliche grössen haben können.Jedes files hat abschnitte welche aus 15 zeilen bestehen und immer drei mal die gleiche 18 stellige nummer haben.(Druckbefehl für eine Labeldrucker).

Möchte nu8n mittels VBA ein File mit einer Nummer, von der ich weiss das sie vorkommt, durchsuchen und bei der ersten Zeile die diese nummer hat stoppen, drei zeilen nicht beachten und dann sechs Zeilen kopieren.


die files sehen ungefähr so aus:


2011-10-01 10:25:54.133 MPP INFO Warten auf Antwort des Printers
2011-10-01 10:25:54.742 MPP INFO Printer zugewiesen: false
2011-10-01 10:25:54.742 MPP INFO PrinterData_inquiry zum Markpoint Printer gesendet
2011-10-01 10:25:54.742 MPP INFO InquiryBefehl: !S1

2011-10-01 10:25:54.742 MPP INFO Warten auf Antwort des Printers
2011-10-01 10:25:54.945 MPP INFO Received data:
2011-10-01 10:25:54.945 MPP INFO Printer zugewiesen: false
2011-10-01 10:25:54.961 BPort INFO Opening port to Mettler: COM3
2011-10-01 10:25:54.992 METT INFO BalanceData_inquiry zur Waage gesendet
2011-10-01 10:25:54.992 METT INFO InquiryBefehl: I2

2011-10-01 10:25:54.992 METT INFO Warten auf Antwort der Waage
2011-10-01 10:25:55.195 METT INFO BalanceData_inquiry zur Waage gesendet
2011-10-01 10:25:55.195 METT INFO InquiryBefehl: I2
011-10-01 10:26:01.648 openPPort INFO Opening port to Printer {0} COM6
2011-10-01 10:26:02.414 toprinter INFO sent to printer...123456789123456789 .....................DAS IST DIE ERSTE
LEERZEILE
LEERZEILE
LEERZEILE
!C ....von hier an kopieren
!Y24 60
!Y35 10
!Y42 1
!F C S 55 840 C 240 4 43 " (00) 123456789123456789 (413) ".........................HIER DIE ZWEITE
!F S S 15 930 C 10 12 94029" (00) 123456789123456789 (413) ".......................UND DIE DRITTE
!P2 .... hier aufhören zu kopieren

Hoffe das irgend jemand mir helfen kann

gruss lee

Content-Key: 190117

Url: https://administrator.de/contentid/190117

Printed on: April 25, 2024 at 05:04 o'clock

Member: bastla
bastla Aug 24, 2012, updated at Aug 25, 2012 at 00:01:29 (UTC)
Goto Top
Hallo lenzmann und willkommen im Forum!

Gundsätzlich sähe das für Dein Beispiel so aus:
Ein = "D:\Dein.log"  
Aus = "D:\Kopie.txt"  
Such = "123456789123456789"  
Abstand = 3 'Zeilen nach Suchbegriff überspringen  
Anzahl = 6' Zeilen kopieren  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)
Do While i < UBound(T) - Abstand - Anzahl 'nur bis Dateiende - Abstand - Anzahl Zeilen lesen  
    If InStr(T(i), Such) >0 Then 'Suchbegriff in Zeile?  
        i = i + Abstand 'Zeilen überspringen  
        For j = 1 To Anzahl 'angegebene Anzahl von Zeilen ...  
            i = i + 1 'nächste Zeile  
            Ausgabe = Ausgabe & vbNewline & T(i) '... der Ausgabe hinzufügen (mit Zeilenschaltungen)  
        Next
    End If
    i = i + 1 'nächste Zeile  
Loop
fso.CreateTextFile(Aus).Write Mid(Ausgabe, 3) 'ohne Leerzeile am Anfang in Datei schreiben  
Grüße
bastla
Member: lenzmann
lenzmann Aug 24, 2012 at 13:59:12 (UTC)
Goto Top
vielen dank werde das heute abend sofort ausprobieren,

lee
Member: lenzmann
lenzmann Aug 24, 2012, updated at Aug 25, 2012 at 12:18:14 (UTC)
Goto Top
habe es jetzt getestet
funktioniert genau wie es mir vorgestellt habe,
Member: bastla
bastla Aug 24, 2012, updated at Aug 25, 2012 at 08:23:34 (UTC)
Goto Top
Hallo lenzmann!
Wenn sie aber irgenwo in der mitte stehen, bleibt das resultat null
Kann ich mir zwar nicht erklären (da der Ablauf des Scripts ja immer gleich ist), aber versuch es mal mit dieser Variante:
Ein = "D:\Dein.log"  
Aus = "D:\Kopie.txt"  
Such = "123456789123456789"  
Abstand = 3 'Zeilen nach Suchbegriff überspringen  
Anzahl = 6' Zeilen kopieren  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set DateiEin = fso.OpenTextFile(Ein)
Set DateiAus = fso.CreateTextFile(Aus)
Do While Not DateiEin.AtEndOfStream 'alle Zeilen der Eingabedatei verarbeiten  
    Zeile = DateiEin.ReadLine 'Zeile einlesen  
    If InStr(Zeile, Such) > 0 Then 'Suchbegriff in Zeile?  
        For i = 1 To Abstand '"Abstand" Zeilen ...  
            DateiEin.SkipLine '... überspringen  
        Next
        For i = 1 To Anzahl '"Anzahl" Zeilen ...  
            DateiAus.WriteLine DateiEin.ReadLine '... einlesen und in die Ausgabedatei schreiben  
        Next
    End If
Loop
MsgBox "Fertig."  
Member: lenzmann
lenzmann Aug 25, 2012 updated at 12:18:47 (UTC)
Goto Top
vielen dank für deine hilfe lee
Member: lenzmann
lenzmann Aug 25, 2012 updated at 12:19:08 (UTC)
Goto Top
habe noch vergessen zu sagen das ich folgende Datentypen deklariert habe

Dim Aus As String
Dim Ein As String
Dim Such As String
Dim Abstand As Integer
Dim Anzahl As Integer
Dim fso As Object
Dim DateiEin As Object
Dim DateiAus As Object
Dim Zeile As Object
Dim WScript As Object

lee
Member: bastla
bastla Aug 25, 2012 at 08:22:59 (UTC)
Goto Top
Hallo lenzmann!

Eigentlich war aber die Rede von VBA (bzw ist das Script als VBS geschrieben; ich ändere die letzte Zeile auf "MsgBox", dann passt's für beide) und nicht von Visual Basic - also versuch es am einfachsten, indem Du den Code als ".vbs" speicherst und ausführst ...
Die Deklarationen kannst Du Dir sparen (oder richtig vornehmen - "Zeile" ist ein String und "WScript" wird keinesfalls benötigt).

Grüße
bastla
Member: lenzmann
lenzmann Aug 25, 2012 updated at 12:19:35 (UTC)
Goto Top
Guten Morgen
Tut mir leid dass ich mich falsch ausgedrückt habe.
Der Script , als VBS gestartet läuft exact so wie ich es mir vorgestellt habe.


Lee
Member: bastla
bastla Aug 25, 2012 at 11:30:11 (UTC)
Goto Top
Hallo lenzmann!

Schrei doch bitte Deine Ideen nicht so raus ...
Ich hoffe, Du findest es auch von mir nicht unverschämt, Dich darauf hinzuweisen, dass Du das Lesen und Schreiben von Textdateien noch oft brauchen wirst und es daher vorteilhaft sein dürfte, Dir das (auch die Online-Hilfe widmet sich diesem Thema) selbst zu erarbeiten - und viel mehr passiert in dem Script ja nicht (und schon gar nicht kommentarlos face-wink) ...

Grüße
bastla
Member: lenzmann
lenzmann Aug 25, 2012 at 12:16:43 (UTC)
Goto Top
ok werde es mal versuchen, trotzdem vielen dank und noch ein schönes wochende

lee