Jag försöker skapa en funktion som infogar ett type element i en type array (av samma type som elementet), men jag får inte detta att fungera. Jag löste problemet själv, bytte ut variabeln string(som ej har fast längd) mot ShortString(som har fast längd, 256byte), det kräver eventuellt lite mer minne, men det duger i min applikation.Infoga element i dynamisk array
I min kod finns följande funktioner:
<code>
type TFrequenceElement = record
Content:String;
Frequence:Integer;
end;
TFrequenceArray=array of TFrequenceElement;
TIntegerArray=array of Integer;
procedure ArrayInsert(var arr:TFrequenceArray;element:TFrequenceElement;pos:Integer);overload;
begin
if(pos>High(arr))then
begin
SetLength(arr,Length(arr)+1);
arr[Length(arr)-1]:=element;
end
else
begin
SetLength(arr,Length(arr)+1);
ShowMessage(inttostr(pos)+' och '+inttostr( Length(arr) - pos -2 ));
System.Move(arr[pos], arr[pos+1],
SizeOf(TFrequenceElement)* ( Length(arr) - pos -2 ) +1 );
arr[pos]:=element;
end;
end;
procedure ArrayInsert(var arr:TIntegerArray;element:Integer;pos:Integer);overload;
begin
if(pos>High(arr))then
begin
SetLength(arr,Length(arr)+1);
arr[Length(arr)-1]:=element;
end
else
begin
SetLength(arr,Length(arr)+1);
System.Move(arr[pos], arr[pos+1],
SizeOf(Integer)* ( Length(arr) - pos -2 ) +1 );
arr[pos]:=element;
end;
end;
</code>
Funktionen som behandlar Integer arrays fungerar hur bra som helst men när jag ska behandla arrays av min egendefinerade type havererar allting.
vad jag vill göra är alltså infoga ett element någonstans mitt i en array.
Jag skulle vara mycket tacksam om någon kunde hjälpa mig att få ovanstående funktion att fungera eller tala om ifall Delphi har en inbyggd funktion för detta som jag råkat missa, eller bidra med en helt annan funktion som utför samma uppgift.
Tack på förhand
/TobiasSv: Infoga element i dynamisk array
(tack till Magnus Karlsson för tipset om datatyper med fast längd)
Koden ser nu ut såhär:
<code>
type TFrequenceElement = record
Content:ShortString;//Förändringen, tidigare: Content:String;
Frequence:Integer;
end;
TFrequenceArray=array of TFrequenceElement;
procedure ArrayInsert(var arr:TFrequenceArray;element:TFrequenceElement;pos:Integer);
begin
if(pos>High(arr))then
begin
SetLength(arr,Length(arr)+1);
arr[Length(arr)-1]:=element;
end
else
begin
SetLength(arr,Length(arr)+1);
System.Move(arr[pos], arr[pos+1],
SizeOf(TFrequenceElement)* ( Length(arr) - pos -1 ) +1 );
arr[pos]:=element;
end;
end;
</code>
/Tobias Ivarsson