mehrere Dateien in einem Verzeichnis auf jeweils 3 bestimmte Strings prüfen + Ausgabe der Ergebnisse in eine Datei

  • Guten Morgen in die Runde,

    ich komme im oben beschriebenen Szenario nicht so richtig weiter ....
    habe allerdings 2 (Teil)Scripte die jeweils einen Teil der Anforderung abdecken - nur die Kombi gelingt mit nicht

    Teil (1)
    Mehrere Dateien aus einem Verzeichnis auswählen, in ein Array einlesen ---> funktioniert
    Dann gesamten Dateiinhalte in ein Summaryfile schreiben, wobei mittels Trennlinie die einzelnen Dateien(inhalte) getrennt werden ---> funktioniert
    (hier sollen aber letztendlich nur jeweils 3 Zeilen der jeweiligen Datei geschrieben werden)

    Teil (2)
    Auslesen der 3 definierten Zeilen aus einer Datei ---> funktioniert

    Leider gelingt es mir nicht den Teil (2) innerhalb von Teil (1) zu integrieren.
    Zum besseren Verständnis hier meine 2 ScriptSnips:

    Teil (1) - Dateiliste / SummaryFile

    Spoiler anzeigen


    #include <file.au3>
    Local $sPath, $aFiles, $sText, $sOrdner
    ;Local $aRecords, $sFoundDB, $sBkpDB, $sSkipDB

    ;~ Folderauswahl
    $sPath = FileSelectFolder("Verzeichnis wählen","D:\Laptop","","")
    If @error Then Exit

    ;~ DateiListe in Array einlesen
    $aFiles = _FileListToArray($sPath,"*.*",1) ; Dateien in ein Array lesen
    ;~ Fehlerhandling
    If @error Then Exit MsgBox(16,"Error","No files found")

    ;~ DateiListe abarbeiten
    For $i = 1 To UBound($aFiles)-1
    $sText &= @CRLF & @CRLF & "--------------- "&$sPath & "\"& $aFiles[$i]& "---------------" & @CRLF & @CRLF ;TrennLinie zw. den Dateien
    $sText &= FileRead($sPath & "\"& $aFiles[$i]) ;Dateiinhalt (gesamt) hinzufügen ; <----- HIER DENKE ICH MUSS DIE 3 ZEILENSUCHE EINGEFÜGT WEDEN
    Next

    ;~ SummaryFile erzeugen und anzeigen
    $sOrdner = StringRegExpReplace($sPath,".+\\","") ;Foldernamen ermiiteln
    FileWrite(@DesktopDir & "\Files from"&$sOrdner&".txt",$sText) ;Neues TxtFile schreiben
    ShellExecute(@DesktopDir & "\Files from"&$sOrdner&".txt") ;Neues TxtFile öffnen


    Teil (2) - Dedizierte Suche nach definierten Strings innerhalb einer Datei (ist angehängt)

    Spoiler anzeigen


    If Not _FileReadToArray(@ScriptDir & "\Log_20150418.txt",$aRecords) Then ;Datei in Array lesen + ErrorHandling
    MsgBox(4096,"Error", " Fehler beim Einlesen der Datei Fehler:" & @error)
    Exit
    EndIf

    Find 'Total dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total found dbs:") Then ; Eintrag ist vorhanden
    $sFoundDB = $aRecords[$x]
    ExitLoop
    Else
    $sFoundDB = "Total found dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next

    ;~ Find 'Bkp dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total bkp dbs:") Then ; Eintrag ist vorhanden
    $sBkpDB = $aRecords[$x]
    ExitLoop
    Else
    $sBkpDB = "Total bkp dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next

    ;~ Find 'Skipped dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total skipped dbs:") Then ; Eintrag ist vorhanden
    $skipDB = $aRecords[$x]
    ExitLoop
    Else
    $sSkipDB = "Total bkp dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next


    So nun ist meine Challenge, daß aus der eingelesenen Dateiliste die jeweiligen 3 Ergebniszeilen (und nur diese) ins SummaryFile geschrieben werden
    Freue mich über jede Hilfe - danke schon einmal im voraus


    ugt100

    • Offizieller Beitrag

    Deine Suche nach den Inhalten ist ziemlich kompliziert. Mittels Regexp geht das wesentlich komfortabler.
    Probier mal so:

  • Hallo Bugfix,

    danke für die schnelle Antwort. Leider kapiere ich das nicht so ganz bzw. das Ergebnis ist nicht das gewünschte.
    So sieht das Ergebnis aus - wenn ich das 'neue' Script (mit Deinen Ergänzungen) nutze.

    Ergebnis:
    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------
    Lorem ipsum dolor sit amet,
    consectetur adipiscing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
    ;--------------------------------------------------------------------------
    Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111
    ;--------------------------------------------------------------------------
    Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111

    Mein Ziel ist das folgende:
    Ich möchte nur die 3 Zeilen aufführen - in etwa so:

    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------
    Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111

    ~;KOMMENTAR: dann folgt ggf. die nächste Datei (im Echtumfeld sind das in Summe 23 zu durchsuchende Files 3 x Täglich)

    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------


    Ich hoffe mal ich konnte es verständlich beschreiben

    Danke
    ugt100

  • Hallo Bugfix,

    ich nochmal - habe es jetzt doch geschnackelt, hatte da noch einen Knoten im Hirn - funzt jetzt prima
    (läuft wie ein Länderspiel - jetzt Dank Deiner Hilfe)

    :thumbup::thumbup::thumbup::thumbup::thumbup::thumbup::thumbup:

    Danke
    ugt100