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")
$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
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
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 =)