Ordner und txt vergleichen

  • hi,

    irgendwie bekomme ich e nicht gebacken. Was möchte ich erreichen.
    Im Ordner sind viele pdf Dateien die so einen Dateinamen D00000_0000595959_200704.pdf etc. In der txt stehen nur solche Nummern wie 0000595959 etc. Nun habe ich beide in ein Arry eingelesen und möchte sie vergleichen da beide von den Nummern(0000595959 etc) gleich sein müssen. Es kann vorkommen das im Ordner weniger Dateien sind. Die fehlende sollen aus der txt angezeigt werden und in eine neue Datei gegeben werden. Leider wird alles eingeschrieben.
    Hier mein Ansatz

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <string.au3>
    ;
    Opt("TrayIconDebug", 1)
    Global $pathCompare = "C:\Taucher\mappe1.txt"
    Global $compare_A
    Global $test = "c:\Taucher\taucher.prob"
    ;
    $FileList=_FileListToArray("C:\Taucher\EVN\PDF\")
    If @Error=1 Then
    MsgBox (0,"","Ich fehle")
    Exit
    EndIf
    _ArrayDisplay($FileList,"$FileList")

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

    If Not _FileReadToArray($pathCompare, $compare_A) Then
    MsgBox(64,"","ich auch")
    Exit
    EndIf
    _ArrayDisplay($compare_A,"$FileList")
    ;
    For $i = 1 To UBound($compare_A) - 1
    If StringMid($FileList, 8, 10) Then
    _ArraySearch($FileList, $compare_A[$i], 1)
    If @error = 6 Then
    _ArrayAdd($FileList, $compare_A[$i])
    EndIf
    EndIf
    Next
    _FileWriteFromArray($test, $FileList,1,0)

    [/autoit]

    Wo liegt mein Fehler und könnt ihr mir den zeigen ob es besser geht?

    mfg Taucher

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

    • Offizieller Beitrag

    Hallo,

    ich würde sagen schau dir das Kapitel über Array und Vergleichen von Strings noch mal an! ;)

    Ich war mal so Frei und habe dein Programm so umgeschrieben das es mit einem Array auskommt.

    Ich gehe davon aus das in der Datei "C:\Taucher\mappe1.txt" die Nummern drin stehen und das in der Datei "c:\Taucher\taucher.prob" das Ergebnis (nicht vorhandene PDF-Dateien) stehen soll.


    [autoit]

    #include <file.au3>

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

    ;~ Opt("TrayIconDebug", 1)

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

    Global $szCompareText, $aszFileList
    Global $szOutFile = "c:\Taucher\taucher.prob"

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

    If FileExists("C:\Taucher\mappe1.txt") Then
    $szCompareText = FileRead("C:\Taucher\mappe1.txt")
    EndIf

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

    ; Kontrollausgabe
    Msgbox(0,"",$szCompareText)

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

    ; Nur PDF-Dateien einlesen
    $aszFileList = _FileListToArray("C:\Taucher\EVN\PDF\", "*.pdf", 1)

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

    If IsArray($aszFileList) Then
    For $cIndex = 1 To $aszFileList[0]
    $szCompareText = StringRegExpReplace($szCompareText, StringMid($aszFileList[$cIndex], 8, 10), "")
    Next
    $szCompareText = StringRegExpReplace($szCompareText, "\n\r\s*", "") ; Leerzeilen entfernen
    EndIf

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

    ; Kontrollausgabe
    Msgbox(0,"",$szCompareText)

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

    $hFile = FileOpen($szOutFile,2)
    FileWrite($hFile,$szCompareText)
    FileClose($hFile)

    [/autoit]
  • hi,

    ich weis nicht was gesehen ist aber irgendwie bekomme ich schreiben der Ausgabedatei eine Leerzeile rein. D.h. auf Zeile 1 steht dann nichts.

    [autoit]

    #include <file.au3>

    ;~ Opt("TrayIconDebug", 1)

    Global $szCompareText, $aszFileList
    Global $szOutFile = "c:\Taucher\taucher.prob"

    If FileExists("C:\Taucher\mappe1.txt") Then
    $szCompareText = FileRead("C:\Taucher\mappe1.txt")
    EndIf

    ; Kontrollausgabe
    Msgbox(0,"",$szCompareText)

    ; Nur PDF-Dateien einlesen
    $aszFileList = _FileListToArray("C:\Taucher\EVN\PDF\", "*.pdf", 1)

    If IsArray($aszFileList) Then
    For $cIndex = 1 To $aszFileList[0]
    $szCompareText = StringRegExpReplace($szCompareText, StringMid($aszFileList[$cIndex], 8, 10), "")
    Next
    $szCompareText = StringRegExpReplace($szCompareText, "\n\r\s*", "") ; Leerzeilen entfernen
    EndIf

    ; Kontrollausgabe
    Msgbox(0,"",$szCompareText)

    $hFile = FileOpen($szOutFile,2)
    FileWrite($hFile,$szCompareText)
    FileClose($hFile)

    [/autoit]

    wie kann ich das Ändern?

    Taucher

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

  • hi,

    jetzt bin ich endgültig am verzweifeln. mit dem Script wird ja die in einem Ordner befindlichen pdf Dateien (mit dem Namenaufbau D10000_0000623547_200708.pdf) mit einer der txt Datei (Inhalt 0000623547;D10000) abgeglichen und die im Ordner fehlenden RE Nummern ausgegeben. Soweit so gut nun habe ich aber zwei Dateien. Augenscheinlich haben beide den selben Satzaufbau.(siehe Anhang) bei der einen klappt die Ausgabe ohne größere Problemen. Doch bei der zweite macht er völligen Quatsch (siehe Anhang) kann mir jemand sagen woran das liegt. Sicher ist das Script noch verbesserungsfähig.

    Mfg Taucher

    Edit: Habe nochmal ein ArrayD. eingebaut und gesehen das schon beim einlesen in das zweite Array zum Fehler kommt siehe Code. kann mir jemand sagen warum das so ist?

    Spoiler anzeigen
    [autoit]

    #include <date.au3>
    #include <misc.au3>
    #include <inet.au3>
    #include <file.au3>
    #include <array.au3>

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

    Const $nTeile = 30
    Global $szCompareText, $aszFileList
    Global $szOutFile = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_Mail_erneut.txt", $lines_A
    Global $szOutFile1 = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_EVN_erneut.txt", $lines_A

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

    $Druck = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_Mail.txt"
    $Druck2 = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_EVN.txt"
    $DruckTB = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_Mail_kurz.txt"
    $DruckTB1 = "C:\Rechnungslauf\" & @YEAR & "\Auslagerung\Log\" & StringFormat("%02d", @MON - 1) &"_EVN_kurz.txt"

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

    ;FileMove($Druck, $Druck2, 1)

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

    _Vergleich_RE_Datei_und_RE_Ordner()

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

    Func _Vergleich_RE_Datei_und_RE_Ordner()
    If FileExists($Druck) Then
    _FileReadToArray($Druck, $string)
    $string1 = _ArrayTrim( $string, 7,1)
    _FileWriteFromArray($DruckTB, $string1, 1)
    $szCompareText = FileRead($Druck)
    If FileExists($szOutFile) Then
    FileDelete($szOutFile)
    EndIf
    EndIf
    $aszFileList = _FileListToArray("C:\EVNVersand\pdf\", "*.pdf", 1)
    If IsArray($aszFileList) Then
    For $cIndex = 1 To $aszFileList[0]
    $szCompareText = StringRegExpReplace($szCompareText, StringMid($aszFileList[$cIndex], 8, 10), "")
    Next
    $szCompareText = StringRegExpReplace($szCompareText, "\n\r\s*", "") ; Leerzeilen entfernen
    EndIf
    MsgBox(0,"",StringRight($szCompareText,7))
    ;
    If $szCompareText > 0 Then
    $hFile = FileOpen($szOutFile, 2)
    FileWrite($hFile, $szCompareText)
    FileClose($hFile)
    EndIf
    Sleep(5000)
    ;hier kommt schon der Fehler beim Einlesen, das die Zeilenumbrüche nicht richtig erkannt werden *Nachtrag von Taucher*
    _FileReadToArray($szOutFile,$lines_A)
    For $i = UBound($lines_A) - 1 To 1 Step - 1
    If Not StringRegExp($lines_A[$i], '[^\s]', 0) Then _ArrayDelete($lines_A, $i)
    Next
    _ArrayDisplay($lines_A,"")
    _FileWriteFromArray($szOutFile, $lines_A, 1)
    EndFunc ;==>_Mail

    [/autoit]