Zitat von lakugibt es nun eine möglichkeit gleiche zahlen zu finden und auszugeben?
Also für mich heißt das nicht, dass er doppelte Einträge löschen, sondern wissen wil,
welche Keys (1,2,3,4,...) denselben Wert haben.
_Array2DDblDel hört sich nach löschen an, ich kenn die Funktion allerdings nicht und kann
daher nicht beurteilen, wie sie funktioniert und was sie ausgibt.
Daher nochmal mein eigener Code dazu ![]()
Dieser Code:
Spoiler anzeigen
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$ret = _IniGetMultiOcc( 'n.ini', 'temp' )
_ArrayDisplay( $ret )
; Name...........: _IniGetMultiOcc
; Description ...: Überprüft die Sektion einer Ini auf mehrere Vorkommen desselben Wertes
; Syntax.........: _IniGetMultiOcc( $ini_path, $ini_section )
; Parameters ....: $ini_path = Pfad zur Ini
; $ini_section = Zu lesende Sektion
; Return values .: Success - Gibt eine Zweidimensionale Array zurück:
; $array[x][0] = Wert
; $array[x][1] = Keys der Ini mit diesem Wert, getrennt durch ','
; Failure - 0, sets @error to 1
; Author ........: limette
; Note: Endlich hab ich auch mal einen Grund eine Beschreibung anzufügen xD
; Irgendwie. Sinnlos. - kannste löschen ![]()
Func _IniGetMultiOcc( $ini_path, $ini_section )
Local $ini = IniReadSection( $ini_path, $ini_section )
If @error Then Return SetError( 1, 0, 0 )
Local $com[1][2]
Local $a = 0, $p, $pi, $i, $j, $c, $found
For $i = 1 To $ini[0][0]
$p = False
For $pi = 0 To UBound( $com ) -1
If $com[$pi][0] = $ini[$i][1] Then ;Eintrag bereits in $com enthalten
$p = True
ExitLoop
EndIf
Next
If Not $p Then ;Wenn Eintrag noch nicht enthalten:
For $j = 1 To $ini[0][0] ;Gehe alle Werte durch
If $ini[$i][1] = $ini[$j][1] And $ini[$i][1] <> '' And $i <> $j Then ;Wenn der Wert gleich ist, aber nicht dasselbe Element
For $c = 0 To UBound( $com ) -1
If $com[$c][0] = $ini[$i][1] Then ;Check, ob inzwischen ein Eintrag angelegt wurde
If Not StringInStr( $com[$c][1], $i ) Then $com[$c][1] &= ',' & $i ;adden, wenn nicht enthalten
If Not StringInStr( $com[$c][1], $j ) Then $com[$c][1] &= ',' & $j ; - " -
$p = True ;Merke: es existiert bereits ein Eintrag
ExitLoop
EndIf
Next
If Not $p Then ;Wenn keiner existiert:
$com[$a][0] = $ini[$i][1]
$com[$a][1] = $i & ',' & $j ;lege einen an.
$a += 1
ReDim $com[$a+1][2]
$p = True
EndIf
EndIf
Next
If Not $p Then ;Wenn nach allen Durchgängen für das eine $i immernoch kein Eintrag existiert, gibt es $i nur 1x und wird hier hinzugefügt
$com[$a][0] = $ini[$i][1]
$com[$a][1] = $i
$a += 1
ReDim $com[$a+1][2]
EndIf
EndIf
Next
ReDim $com[UBound( $com )-1][2]
Return $com
EndFunc ;==> _IniGetMultiOcc
Gibt bei dieser Ini
Spoiler anzeigen
Zitat von iniAlles anzeigen
[temp]
1=3120528
2=3120528
3=2932864
4=1252784
5=3120528
6=2932864
7=1252784
8=3120528
9=1252784
10=1252784
11=4465783
12=3120528
das hier aus
Spoiler anzeigen
Zitat von Ausgabe
[0] | 3120528 | 1,2,5,8,12
[1] | 2932864 | 3,6
[2] | 1252784 | 4,7,9,10
[3] | 4465783 | 11
Ich denke das sind Wertem mit denen man arbeiten kann.
Hoffe geholen zu haben ![]()
mfg limette
Edit: Streich den Monstercode da oben. Geht viiieeel einfacher x)
Spoiler anzeigen
#include <Array.au3>
$arr = _IniGetMultiOcc( 'n.ini', 'temp' )
_ArrayDisplay( $arr )
Func _IniGetMultiOcc( $sini, $isection )
FileDelete( @TempDir & '\temp.ini' )
$ini = IniReadSection( $sini, $isection )
If @error Then Return SetError( -1, 0, 0 )
For $i = 1 To $ini[0][0]
$wr = IniRead( @TempDir & '\temp.ini', 'temp', $ini[$i][1], '' )
If $wr <> '' Then $wr &= ','
$wr &= $ini[$i][0]
IniWrite( @TempDir & '\temp.ini', 'temp', $ini[$i][1], $wr )
Next
Return IniReadSection( @TempDir & '\temp.ini', 'temp' )
EndFunc