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 :
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; |
mais je me retrouve avec une erreur d'exception me disant violation d'acces.
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.
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; |
donc si vous avez une idée...
ca plante sur :
if TempTab[Count] = Tableau[Pos] then Ajout := false;
Partager