Ausgabe mit vorhandenden Dokument vergleichen

  • Also habe ein mitterlschweres Problem wo ich mit meinen premetiven Mitteln nciht geht bzw extrem lange dauert.

    Habe hier ein Programm was aus einer Logfile ip´s die auf meinen FTP waren rausfiltert.
    Dabei sind einige die ich nicht wünsche in einer anderen TXT=>Blacklist

    Wenn ich nun das Programm starte erstellt diese eine TXT=>Log.txt (diese wird Zeile für Zeile aufgabt mit filewriteline)die an einen Tag auf meinen FTP waren, dabei soll bevor es den Eintrag schreibt überprüft werden ob diese auf der "Blacklist" =>Blacklist.txt stehen, da es sonst ne Chaos wird

    Da in der Blacklist schon einge Ip´s drinnen sind fällt dort filereadline mit schleife weg

    Also bleibt Array aber davon habe ich keine Ahnung da ich mich kaum noch mit Autoit beschäftigen konnte...

    Also muss ich Praktisch bevor mein Programm filewriteline ausführt überprüfen ob der wert schon einmal in der "Blacklist" vorhanden ist

    und das für jede Zeile die er in die TXT schreibt(Die Log ist 30-40MB am tag, mit haufen unnützer Infos)

    Oder ist es möglich die fertig erstelle Log.txt einfach mit der Blacklist.txt zu vergleichen und alle ip´s die in der Blacklist sind in der log.txt zu löschen


    wie soll ich das Bloß Formulieren :(

  • 30-40 MB mit AutoIt... Da kannst ne halbe Stunde warten o_o
    Also, zum Suchen in der Blacklist::

    [autoit]

    _FileReadToArray()
    _ArraySort()
    _ArrayBinarySearch()

    [/autoit]
  • ich schau mir das mal an, setzt voraus das ich hier weiterkomme

    ok es geht schonmal nur habe ich einen Fehler endeckt

    Wenn auf der blacklist meinetwegen diese ip ist

    Code
    217.115.138.661

    der wird er gefunden wenn nach

    Code
    217.115.138.66

    gesucht wird da es aber unterschiedliche werte sind gibts es da fehler, wie kann man das vermeiden suchen mach ich mit diesen befehl

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

    func write()
    _FileReadToArray($Compareimail,$compare)
    For $y = $i - $Zeile To $i

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



    $output=StringRegExp($lines[$y],"\A(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)",1)


    $Pos = _ArraySearch ($compare, $output[0], 0, 0, 0, True)
    Select
    Case $Pos = -1
    MsgBox(0, "Not Found", '"' & $output[0] & '" was not found in the array.')
    FileWriteLine($Ausgabe&"imail_smtp.txt", $output[0])

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

    Case Else
    MsgBox(0, "Found", '"' & $output[0] & '" was found in the array at pos ' & $Pos & ".")
    EndSelect

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



    ExitLoop

    Next
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Pinguin (29. Dezember 2007 um 18:11)

  • Hier zwei Möglichkeiten:
    Entweder mit ArrayBinarySearch, wobei ich denke, dass das schneller ist
    oder mit ArraySearch, wobei der letzte Parameter FALSE sein muss, damit immer der komplette String verglichen wird und nicht nur ein Teil

    Spoiler anzeigen
    [autoit]

    ;_ArrayBinarySearch
    func write()
    _FileReadToArray($Compareimail,$compare)
    _ArraySort($compare,0,1)
    For $y = $i - $Zeile To $i

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

    $output=StringRegExp($lines[$y],"\A(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)",1)
    $Pos = _ArrayBinarySearch($compare, $output[0], 1)
    Select
    Case $Pos = -1
    MsgBox(0, "Not Found", '"' & $output[0] & '" was not found in the array.')
    FileWriteLine($Ausgabe&"imail_smtp.txt", $output[0])

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

    Case Else
    MsgBox(0, "Found", '"' & $output[0] & '" was found in the array at pos ' & $Pos & ".")
    EndSelect


    ExitLoop

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

    Next
    EndFunc

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

    ;_ArraySearch
    func write()
    _FileReadToArray($Compareimail,$compare)
    For $y = $i - $Zeile To $i

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

    $output=StringRegExp($lines[$y],"\A(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)",1)
    $Pos = _ArraySearch($compare, $output[0], 1,0,1,False)
    Select
    Case $Pos = -1
    MsgBox(0, "Not Found", '"' & $output[0] & '" was not found in the array.')
    FileWriteLine($Ausgabe&"imail_smtp.txt", $output[0])

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

    Case Else
    MsgBox(0, "Found", '"' & $output[0] & '" was found in the array at pos ' & $Pos & ".")
    EndSelect


    ExitLoop

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

    Next
    EndFunc

    [/autoit]
  • Hallo, danke dir
    ArrayBinarySearch funktioniert nicht, diese meldet immer Found, obwohl zu 100 komplett verschiedene Ip drinnen ist.

    die anderefunktioniert dagegen perfekt

    Ich danke dir, und nen Frohes Neues Jahr