Datei filtern

  • hallo ich habe eine csv-datei in der folgende werte bereits sortiert vorliegen

    anmeldung (CStore::LogInfo)

    meldung 1 (MailKernel::LogStatus)

    fehler (CMessage::CopyToPST)

    abmeldung (CSession::Logoff)

    ich habe bereits mit grep daten in einzelnen dateien aus den ca 80 logfiles gezogen und in einer datei zusammengefasst (sortiert nach dateiname, datum und zeilennummer)

    entscheidend ist dass ich nur die zeilen von anmeldung bis abmeldung brauche wenn der bereich einen fehler beinhaltet.

    also anmeldung - meldung - fehler - abmeldung (wobei meldung auch mehrfach vorkommen kann.)

    flogende zeilenkonstellationen will ich löschen:

    anmeldung - abmeldung / anmeldung - meldung - abmeldung / anmeldung - fehler - abmeldung

    einen auszug der csv-datei hab ich im anhang. die original-datei ist knapp 80 mb groß :(

    könnt ihr mir tipps geben? oder bei dem anfang helfen?


    grüße

    stefan

  • Hoffentlich ist das so wie gewollt:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aFile, $aFile_New[1]
    _FileReadToArray("3rd5000wave_sorted_clear (2).txt", $aFile)

    [/autoit] [autoit][/autoit] [autoit]

    Global $SectionStart = 0
    Global $TraceMsg = 0
    Global $Error = 0
    Global $IndexStart, $IndexStop

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aFile[0]
    If StringInStr($aFile[$i], "CStore::LogInfo;Informational;4905") And $SectionStart = 0 Then
    $SectionStart = 1
    $IndexStart = $i
    ContinueLoop
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Do
    If StringInStr($aFile[$i], "CSession::Logoff;TraceMsg;4801") Then $SectionStart = 0
    $TraceMsg += StringInStr($aFile[$i], "MailKernel::LogStatus;TraceMsg;2040")
    $Error += StringInStr($aFile[$i], "CMessage::CopyToPST;Error;")
    $i += 1
    Until $SectionStart = 0

    [/autoit] [autoit][/autoit] [autoit]

    If $TraceMsg And $Error Then
    $IndexStop = $i
    For $j = $IndexStart To $IndexStop - 1
    _ArrayAdd($aFile_New, $aFile[$j])
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $TraceMsg = 0
    $Error = 0
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aFile_New[0] = UBound($aFile_New)
    _ArrayDisplay($aFile_New)
    _FileWriteFromArray(@ScriptDir & "\NewLogFile.txt", $aFile_New, 1)

    [/autoit]