Arrays an verschiedenen stellen vergleichen

  • Hi Leute .. ich hab hier und auch im englischen Forum schon viel gelesen, aber hab leider nichts gefunden was mit weiterhilft ..

    Ich wollte eigentlich nur in einer Datei die doppelten Einträge finden und NICHT löschen, sondern in eine neue Datei schreiben. Hier und auch sonst immer wollen die Leute die doppelten Einträge immer löschen und dazu gibts auch tausend simple Möglichkeiten. Naja wie auch immer, ich hab mir hier was gebastelt womit das theoretisch gehen sollte. Da ist aber angeblich nen Fehler drin den ich einfach nicht sehe ..
    Vlt könnt ihr mir ja helfen :)

    Er meckert bei mir an dieser Stelle hier:
    If $aContent[$j] = $aContent[$j+1] Then
    Wo liegt der Fehler? Kann ich denn nicht einfach den Array an dieser Stelle mit der anderen vergleichen?

    Dadurch das der Array sortiert wird werden die doppelten Einträge alle untereinander geschrieben. Wenn ich also Stelle für Stelle mit der folgenden vergleiche müsste er ja die doppelten finden ..? Oder ist der Gedanke falsch? :D
    Oder habt ihr vlt sogar nen besseren Ansatz für mich? :)

    Ich würd mich über Hilfe echt freuen! Danke :D

    lg
    Leo.1906

    Einmal editiert, zuletzt von Leo.1906 (13. Februar 2014 um 22:17)

  • Zitat

    Er meckert bei mir an dieser Stelle hier:
    If $aContent[$j] = $aContent[$j+1] Then
    Wo liegt der Fehler? Kann ich denn nicht einfach den Array an dieser Stelle mit der anderen vergleichen?


    er meckert bestimmt mit den worten
     Array variable has incorrect number of subscripts or subscript dimension range exceeded.
    in dieser fehlermeldung steh eigentlich schon alles was man wissen muss.
    Wenn du 10 Einträge in der Datei hast mit welchem Eintrag wird dann der letzte verglichen? zugriff auf fremden speicher==fehlermeldung ;)
    Außerdem gibt _FileReadtoArray() im ersten Element die Anzahl der Array Elemente aus was dir das Ubound erspart. Ansonsten kann ich nur raten das du errorhandling einfügst es ist zwar ein kleiner script, aber man sollte sich früh daran gewöhnen. :D
    Wenn du mehr als 3x den gleichen eintrag in der datei neu.txt hast wird der eintrag auch öfter als einmal in der ausgabe vorkommen _ArrayUnique() auf $aArrayTmp sollte den fehler beheben.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <File.au3>

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

    Dim $sFilePath = "new.txt"
    Dim $aContent
    Dim $newfile = "double.txt"

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

    _FileReadToArray($sFilePath, $aContent)
    _ArraySort($aContent,0,1);das erste element auslassen da sonst die Anzahl der elemente flöten geht
    Dim $aArrayTmp[1]
    For $j = 1 To $aContent[0]-1;enthällt anzahl der Array elemente ; Anfang bei 1 da der Eintrag im Array mit index 0 ja die anzahl enthällt
    If $aContent[$j] = $aContent[$j+1] Then
    _ArrayAdd($aArrayTmp, $aContent[$j])
    EndIf
    ;$j = $j+1 <- Todsünde ;( $j wird automatisch nach jedem durchgang von For um Step (default=+1) erhöt oder verringert
    Next
    $aArrayTmp=_ArrayUnique($aArrayTmp, 1, Default,Default, 0)
    _FileWriteFromArray($newfile, $aArrayTmp)

    [/autoit]

    Einmal editiert, zuletzt von bollen (13. Februar 2014 um 18:08)