bonjour j'ai un souci dont je n'arrive pas a me defaire. J'ai créé une proocédure pour enlever tous les doublons d'un tableau :
mais je me retrouve avec une erreur d'exception me disant violation d'acces.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 procedure TArray.Unique(); var TempTab : Array of Variant; TempCurrentPos : integer; Pos, Count : integer; Ajout : Boolean; begin if(CurrentLength>1) then begin SetLength(TempTab, CurrentLength); TempCurrentPos := 0; for Pos := 0 to CurrentLength - 1 do begin Ajout := true; for Count := 0 to TempCurrentPos - 1 do begin ShowMessage(ShowBasicVariantType(TempTab[Count]) + ' - ' + ShowBasicVariantType(Tableau[Pos])); if TempTab[Count] = Tableau[Pos] then Ajout := false; end; if (Ajout) then begin TempTab[TempCurrentPos] := Tableau[Pos]; inc(TempCurrentPos); end; end; DelAllElement(); for Count := 0 to TempCurrentPos - 1 do AddElement(TempTab[Count]); end ; end;
les deux elements de comparaison son tous deux de type varDispatch.
Une petite idée ?
CurrentLength est la longueur du tableau fournie lors de l'instanciation de mon composant TArray.
donc si vous avez une idée...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 TArray = class(TObject) constructor Create; procedure SetIncrement(Increment : Integer); function AddElement(Element : Variant) : Boolean; overload; function AddElement(Element : Variant; Index : Integer) : Boolean; overload; function DelElement(Index : Integer) : Boolean; function DelAllElement() : Boolean; function GetElement(Index : Integer) : Variant; function Length() : Integer; procedure Unique(); function ShowBasicVariantType(varVar: Variant) : string; private Tableau : Array of Variant; CurrentLength : Integer; MaxLength : Integer; CurrentIncrement : Integer; public end;
ca plante sur :
Code:if TempTab[Count] = Tableau[Pos] then Ajout := false;
