Redimensionner un tableau
Introduction
La méthode est différente selon que vous utilisiez Delphi 4, 5, 6, 7 ou une version antérieure.
Delphi 4, 5, 6, 7
Il suffit de déclarer un tableau dynamique, sans spécifier de taille:
Déclaration du tableau
var xxx: array of integer;
Ensuite, dans le programme, il suffit de lui assigner une taille à chaque fois que tu as besoin d'ajouter ou de retirer des éléments, grâce à la fonction SetLength:
Changement de taille du tableau
begin SetLength(xxx, 25); end;
Pour obtenir la taille, la fonction Length:
Récupération de la taille
var size: integer; begin size := Length(xxx); end;
Pour ajouter une entrée au tableau:
Ajouter une etrée
begin SetLength(xxx, Length(xxx) + 1); end;
pour retirer une entrée au tableau:
Retirer une entrée
begin SetLength(xxx, Pred(Length(xxx))); end;
Delphi 1, 2, et 3
Vous ne pouvez pas redimensionner un tableau non dynamique en Pascal. Vous pouvez créer et redimensionner un tableau créé dynamiquement. Pour le faire, vous devez créer le tableau dyamique, désactiver le contrôle d'intervalle, et accéder aux membres du tableau via une variable uniquement, ou vous aurez des erreurs lors de la compilation. Comme vous accedez au tableau à traversune variable pointeur, vous pouvez redimensionner le tableau en créant un nouveau tableau en mémoire, copiez tous les éléments valides du tableau original vers le nouveau tableau, libérer la mémoire pour le tableau original, et réassigner le pointeur du nouveau tableau au pointeur du tableau original:
Simulation de tableaux dynamiques
type
TSomeArrayElement = integer;
PSomeArray = ^TSomeArray;
TSomeArray = array[0..0] of TSomeArrayElement;
procedure CreateArray(var TheArray : PSomeArray;
NumElements : longint);
begin
GetMem(TheArray, sizeof(TSomeArrayElement) * NumElements);
end;
procedure FreeArray(var TheArray : PSomeArray;
NumElements : longint);
begin
FreeMem(TheArray, sizeof(TSomeArrayElement) * NumElements);
end;
procedure ReSizeArray(var TheArray : PSomeArray;
OldNumElements : longint;
NewNumElements : longint);
var
TheNewArray : PSomeArray;
begin
GetMem(TheNewArray, sizeof(TSomeArrayElement) * NewNumElements);
if NewNumElements > OldNumElements then
Move(TheArray^,
TheNewArray^,
OldNumElements * sizeof(TSomeArrayElement)) else
Move(TheArray^,
TheNewArray^,
NewNumElements * sizeof(TSomeArrayElement));
FreeMem(TheArray, sizeof(TSomeArrayElement) * OldNumElements);
TheArray := TheNewArray;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
p : PSomeArray;
i : integer;
begin
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
CreateArray(p, 200);
for i := 0 to 199 do p^[i] := i;
ResizeArray(p, 200, 400);
for i := 0 to 399 do p^[i] := i;
ResizeArray(p, 400, 50);
for i := 0 to 49 do p^[i] := i;
FreeArray(p, 50);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
end;
3 requête(s) SQL executée(s) en 0.001 Secs - Temps total de génération de la page : 0.007 Secs
