zwei TXT Dateien vergleichen und Zeile löschen

  • Hi,
    frohe Ostern noch ins Forum.
    Ich habe ein Problem, wo ich nicht so recht weiterkomme bzw. auch nicht den rechten Lösungsansatz habe.
    Ausgangssituation:
    2 txt Dateien (siehe Anhang)
    Es soll überprüft werden ob die in der 2.txt enthaltene Nummer in der 1.txt drin ist. Wenn dies der Fall ist dann soll die gesamte Zeile mit dieser Nummer aus der 1.txt entfernt werden.
    Die Nummer steht in der 1.Txt in der Zeile in diesem Aufbau "\D16802_0000709822_200903.PDF".
    Wie müsste der lösungsansatz asusehen

    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

    Einmal editiert, zuletzt von taucher_2006 (13. April 2009 um 17:59)

  • Hallo,
    die Suchzeile in der 2. *.txt-Datei mittels

    [autoit]

    $suchstring=filereadline("txt2.txt",1)

    [/autoit]

    auslesen.
    Dann diesen String mit den ebenfalls eingelesenen Zeilen per stringinstr() in der 1. *.txt vergleichen und ggf löschen.
    Dies würde z.b. mit _filereadtoarray gehen, im Array den String suchen, per arraydelete() löschen und das Array mit _filewritefromarray() wieder in die Datei schreiben

  • [autoit]


    $2txt = FileOpen ("2.txt", 0)
    $Ausgelesen = FileRead ($2txt)
    FileClose ($2txt)
    $1txt = FileOpen ("1.txt", 0)
    $Ausgelesen2 = FileRead ($1txt)
    FileClose ($1txt)
    $Abfragen = StringReplace ($Ausgelesen2, $Ausgelesen, $Ausgelesen)
    If $Abfragen = 0 Then
    MsgBox (0, "O Ergebnisse", "Die Nummer wurde nicht gefunden.")
    Exit
    ElseIf Not $Abfragen = 0 Then
    MsgBox (0, "Ergebniss", "Die Nummer ist vorhanden.")
    Exit
    EndIf

    [/autoit]

    Da war wohl wer schneller :D
    Aber meine Methode ist umständlicher.^^
    Jedoch funktioniert sie bei mir.
    Nur in meinem Beispiel wird eben noch nicht die Zeile gelöscht.
    ^^

  • @PokerFace
    mit stringreplace() ersetzt du nur den gefundenen String, löschst aber nicht die gesamte Zeile aus der Datei

    • Offizieller Beitrag

    Beide Dateien in jeweils ein Array einlesen (_FileReadToArray) und dann in einer For...Next-Schleife alle Array-Elemente durchgehen und testen, ob die Zahlen aus dem "2.txt"-Array in dem "1.txt"-Array enthalten sind (StringInStr). Wenn ja, dann die Zeile löschen.
    Abschließend das Array wieder abspeichern (_FileWriteFromArray).

  • Das ist mir klar ^^
    Ich habe nur, wei du auch siehst, dies zur Abfrage genutzt.
    Denn, der String wird mit dem selben Ersetzt also ändert sich nichts an der Datei.
    Jedoch gibt AutoIt dann eine Zahl größer 0 aus, wenn er was ersetzt hat.
    Somit weiß man, dass etwas gefunden wurde.
    Anstatt die MsgBox sollte dann einfach dort der Befehl für das Zeile löschen sein. ^^
    Mann könnte doch die txt in eine Array aufteilen, mit String Split bei der Enter Taste.
    Und dann muss man Array[1] löschen und die erste Zeile bis zur Enter Taste.
    Also dem Zeilenumbruch ist gelöscvht,.^^


    Etwas schneller als ich. :D
    Aber seine Lösung ist auch besser :D

  • 2 Antworten sind besser als garkeine^^
    Irgendwie sollte es eine Art "LOCK"-Funktion für bereits von jemand anderem bearbeitete Threads in der Forensoftware geben ;)
    Incl. Mitteilung:" Es wird bereits auf diesen Thread von einem anderen User geantwortet, bitte warten Sie dessen Beitrag ab."
    Oder würde so etwas die "Vielfalt" an Antworten beeinflussen?

  • Das wäre mal interessant ^^
    Aber nur, wenn der Inhalt, des geschriebenem dem anderen gleicht.
    Vergleichen und wenn mehr als 50 % Der Wörter übereinstimmen eine Meldung ausgeben.^^

    Wenn z.B so Schlagworte wie
    Array, _AddArray, FileRead, String und sowas kommen.
    Eben AutoIt Begriffe.
    Wenn die sich gleichen eine Meldung ausgeben =)

  • hi,

    danke, hatte mich aber schon mit der Hilfe beschäftigt und bin mit

    [autoit]

    $taucher = _StringBetween($szCompareText, '_', '_', -1, 1)

    [/autoit]


    zum Ziel gekommen.
    Vielleicht sollte ich vorher doch mal die Hilfe welzen. :wacko:

    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