Zwei TXT vergleichen und Zeile löschen

  • Hallo Gemeinde

    ich benötige mal wieder eure Hilfe. Ich habe zwei txt Dateien. In der einen sind alle schon geladenen Dateinamen drin. In der zweiten sind alle die Dateinamen drin die schon mal geladen wurden aber einen fehler haben. Diese müssen jetzt aus der ersten Datei wieder raus, damit diese erneut und vollständig geladen werden können.
    Die Datei 1 wird für ein anderes Script als Referenz benutzt. Alles was da nicht drin ist wird nach erneutem Start gedownlodet.
    Beispiel: 1.txt
    1of1_01049000024172320061011000000.CDR
    1of1_01049000024172320061012000000.CDR
    1of1_01049000024172320061013000000.CDR
    1of1_01049000024172320061014000000.CDR
    1of1_01049000024172320061015000000.CDR
    1of1_01049000024172320061016000000.CDR
    1of1_01049000024172320061017000000.CDR
    1of1_01049000024172320061018000000.CDR
    1of1_01049000024172320061019000000.CDR
    1of1_01049000024172320061020000000.CDR

    Beispiel: 2.txt
    1of1_01049000024172320061011000000.CDR
    1of1_01049000024172320061012000000.CDR
    1of1_01049000024172320061013000000.CDR
    1of1_01049000024172320061014000000.CDR

    Das ist mein Ansatz der aber nicht recht möchte.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <date.au3>
    ;
    Global $pathMain = "G:\referenz\referenz.prob"
    Global $pathCompare = "C:\Datensicherung\fehler.prob"
    Global $mainFile_A
    Global $oldFile_A = $mainFile_A
    Global $compare_A
    TrayTip("MBS-N", "Tagesrohdaten von Verizon werden geladen. Bitte warten...", 60000)
    ;FileWriteLine($PROTFILE, "Am " & _NowDate & " wurden die Datein " & $compare_A[$i] & " gedownloadet."@CRLF)
    $CDR = "*.CDR"
    $PROTFILE = ""
    $Outlook2003 = @ProgramFilesDir & "\Microsoft Office\Office11\Outlook.exe"
    $PID = ProcessExists("Outlook.exe")
    ;
    If Not FileExists ($pathCompare) Then
    ;_Liste()
    EndIf
    Sleep(12000)
    If Not _FileReadToArray($pathCompare, $compare_A) Then ;Fehlermail weil tägliche.txt nicht erstellt werden kann
    _errormail1()
    Exit
    EndIf
    If Not _FileReadToArray($pathMain, $mainFile_A) Then
    _errormail2()
    Exit
    EndIf

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

    For $i = 1 To UBound($compare_A) - 1
    If StringRight($compare_A[$i], 4) = ".CDR" Then
    _ArraySearch($mainFile_A, $compare_A[$i], 1)
    If @error = 6 Then
    _ArrayAdd($mainFile_A, $compare_A[$i])
    _ArrayDelete($mainFile_A,$compare_A[$i])
    Sleep(60000)
    EndIf
    EndIf
    Next
    _FileWriteFromArray($pathMain, $mainFile_A, 1, 0)

    EndIf

    [/autoit]

    Was mache ich falsch? Gibt es eine elegantere Lösung?

    MFG Taucher_2006

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • sorry, gelöscht, da was übersehen

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (27. Mai 2007 um 14:04)

    • Offizieller Beitrag

    Hallo!

    _ArrayDelete benötigt die Position im Array zum löschen, nicht den String!
    Warum Du vor dem Löschen nochmal ein _ArrayAdd machst verstehe ich nicht so ganz, wenn Du löschen willst mußt Du doch nicht vorher hinzufügen!

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <date.au3>
    ;
    Global $pathMain = "G:\referenz\referenz.prob"
    Global $pathCompare = "C:\Datensicherung\fehler.prob"
    Global $mainFile_A
    ;~ Global $oldFile_A = $mainFile_A ; Was soll das für einen Zweck haben?
    Global $compare_A
    TrayTip("MBS-N", "Tagesrohdaten von Verizon werden geladen. Bitte warten...", 60000)
    ;FileWriteLine($PROTFILE, "Am " & _NowDate & " wurden die Datein " & $compare_A[$i] & " gedownloadet."@CRLF)
    $CDR = "*.CDR"
    $PROTFILE = ""
    $Outlook2003 = @ProgramFilesDir & "\Microsoft Office\Office11\Outlook.exe"
    $PID = ProcessExists("Outlook.exe")
    ;
    If Not FileExists($pathCompare) Then
    ;_Liste()
    EndIf

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

    Sleep(12000) ; Da mag es wohl einer das seine Programme extra lange laufen!

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

    If Not _FileReadToArray($pathCompare, $compare_A) Then ;Fehlermail weil tägliche.txt nicht erstellt werden kann
    _errormail1 ()
    Exit
    EndIf
    If Not _FileReadToArray($pathMain, $mainFile_A) Then
    _errormail2 ()
    Exit
    EndIf

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

    For $i = 1 To UBound($compare_A) - 1
    If StringRight($compare_A[$i], 4) = ".CDR" Then
    $iPos = _ArraySearch($mainFile_A, $compare_A[$i], 1)
    If $iPos > -1 Then ; Wenn ein Eintrag gefunden
    _ArrayDelete($mainFile_A, $iPos) ; diesen Löschen
    ;~ Sleep(60000) ; Warum 60 sek. Pause ?
    EndIf
    EndIf
    Next
    _FileWriteFromArray($pathMain, $mainFile_A, 1, 0)

    [/autoit]
  • hallo bernd,

    danke für die unterstützung werde es testen. die vielen sleeps haben eine ursache. das script abrbeitet mit der cmd. dort sehe ich nicht wenn er eine aufgabe erfüllt hat. so habe ich die zeit ausgetestet. leider darf dann aber nichts dazwischen kommen.

    mfg taucher_2006

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D