Doppelten Datensatz aus Ini-Datei löschen

  • Hallo Leute,
    Ich habe ein kleines Problem.

    Ich lese eine Ini-Datei in ein 2D Array ein und dieses Array wird dann in eine ListView eingetragen. Drückt man nun den entfernen Button unter der ListView, so wird der Eintrag aus dem Array, aus der ListView und der Ini- Datei überschreiben, und anschließend aus den drei Besagten auch gelöscht. (Ja ich weis das kann man auch einfacher machen werde ich auch, wenn ich kurz vor dem final bin =) )

    Mein Problem besteht jetzt darin das jetzt das hier passiert:

    Ini-Datei vor EntfernenButton:

    1=a
    2=b
    3=c
    4=d
    5=e


    Ini-Datei nach dem EntfernenButton (z.B Eintrag 2 entfernen):

    1=a
    2=c
    3=d
    4=e
    5=e


    So die Funktion von unten schiebt alle Einträge um ein nach oben, allerdings hab ich jetzt einen doppelten Eintrag, und zwar ist das immer der Letzte!
    Das Problem besteht nur in der Ini Datei, nicht im Array und auch nicht in der ListView, da wird alles richtig angezeigt.


    Quellcode:

    [autoit]

    Func ListBox_Mitarbeiter_fuellen()

    $Array2 = IniReadSection($Pfad_Mitarbeiter&"\Mitarbeiter.ini", "Mitarbeiter")
    $LastIndex = $Array2[0][0]


    For $i = 0 to $LastIndex Step 1


    If $Array2[$i][1] <> "leer" And $Array2[$i][1] <> "" Then

    GUICtrlCreateListViewItem($Array2[$i][0]&"|"&$Array2[$i][1], $Mitarbeiter_List)
    _ArrayDisplay($Array2, "Mitarbeiter")

    Endif

    Next

    MsgBox(0,"","ListView angelegt")

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

    $Array2 = IniReadSection($Pfad_Mitarbeiter&"\Mitarbeiter.ini", "Mitarbeiter")
    MsgBox(0,"","ReadSection")

    For $a = UBound($Array2)-1 To 0 Step -1

    If $Array2[$a][1] = "leer" Then

    _Array2DDelete($Array2, $a)
    _ArrayDisplay($Array2, "Mitarbeiter")
    _GUICtrlListView_DeleteAllItems($Mitarbeiter_List)

    EndIf

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

    Next

    MsgBox(0,"","Array gespeichert ohne 'leer' Einträge")


    $Index = 1

    For $s = 1 To Ubound($Array2)-1 Step 1

    IniWrite($Pfad_Mitarbeiter&"\Mitarbeiter.ini", "Mitarbeiter", $Index-1, $Array2[$s][1])
    $Index = $Index +1

    Next

    $Index = $LastIndex-1

    MsgBox(0,"","Datei gespeichert ohne 'leer' Einträge")


    For $t = 1 To Ubound($Array2)-1 Step 1
    For $v = $t+1 To UBound($array2)-1

    If $Array2[$t][1] = $Array2[$v][1] Then

    MsgBox(0,"", "Array Eintrag: "&$t&" | "&$v&" sind gleich")
    _ArrayDelete($Array2,$v)
    _ArrayDisplay($Array2)

    EndIf

    Next
    Next

    MsgBox(0, "", "Array gespeichert ohne Doppelte Einträge")

    _GUICtrlListView_DeleteAllItems($Mitarbeiter_List)


    For $w = 0 to Ubound($Array2)-1 Step 1

    If $Array2[$w][1] <> "leer" And $Array2[$w][1] <> "" Then

    GUICtrlCreateListViewItem($Array2[$w][0]&"|"&$Array2[$w][1], $Mitarbeiter_List)
    _ArrayDisplay($Array2, "Mitarbeiter")

    Endif

    Next

    MsgBox(0,"","ListView ohne Dopplete Einträge gespeichert")

    $IndexNew = 1

    For $NewInt = 1 To Ubound($Array2)-1 Step 1

    IniWrite($Pfad_Mitarbeiter&"\Mitarbeiter.ini", "Mitarbeiter", $IndexNew-1, $Array2[$NewInt][1])
    $IndexNew = $IndexNew +1

    Next

    $IndexNew = $LastIndex-1

    MsgBox(0,"","Datei gespeichert ohne 'leer' Einträge")


    Return $LastIndex

    EndFunc

    [/autoit]


    Die ganzen MsgBox'n sind nur zum Testen ob das Programm lauft. Da mir kein Fehler angezeigt wird und ich selbst nicht den Fehler finden kann, der das Problem verursacht würde ich mich echt freunen, wenn mir hier einer bei helfen könnte :)


    Bisher sind es viele Zwischenschritte in der Funktion, aber ich brauche wirklich nur Hilfe bei den Doppelten Eintrags Problem, der Rest ist erstmal unwichtig =)


    Freue mich über jede Hilfreiche Antwort =)

    • Offizieller Beitrag

    Hi.
    Mehrere Möglichkeiten gibt es.
    1. Deine Ini enthällt nur die Section Mitarbeiter, dann lösche einfach die INI Datei vor dem neuschreiben.
    2. Lösche jeden einzelnen Eintrag für Mitarbeiter aus der Section Mitarbeiter mittels IniDelete.
    Dazu liest du die Section mit IniReadSection aus und löschst jeden einzelnen Eintrag in deinem Array.
    Das kannst du in einer Schleife machen.

    Edit:
    2. Lösche einfach die Section mittels IniDelete (hab eben nachgesehen, das man damit ganze Sections löschen kann, wenn man den Key Parameter wegläßt.

    Wenn du ein ausführbares Beispiel und nicht nur einen Codefetzen posten würdest, könnte man dir auch den Code abändern. ;)
    Das Anfänger immer so ein Geheimnis um ihren Code machen müssen. Es ist wesentlich einfacher einen Code auszuführen und dabei die Fehler sofort zu sehen,
    als anhand eines Codefetzens die Funktion zu analysieren.