![]() |
setlength bei dynamischen array
Ich hab ein problem dass mein dynamisches array jedesmal wenn ich die länge mit setlength erhöhe, komplett überschrieben wird, das heisst alle die einträge die ich gemacht habe werden alle gelöscht und nur der neue eintrag bleibt bestehen!!
hoffentlich versteht einer was ich zu erklären versuche, und hoffentlich weiss einer was ich machen kann!ü! :D |
Re: setlength bei dynamischen array
Hallo Scottsman,
der OH ist folgendes zu entnehmen: Zitat:
|
Re: setlength bei dynamischen array
Kannst Du ein Beispiel zeigen, wo Dein Problem auftritt? In entsinne mich auch nicht an solche Effekte.
|
Re: setlength bei dynamischen array
ich habe ein dynamisches array, und jedesmal wenn ich eine zeile ins array einfügen will, erhöhe ich mit setlength die länge des arrays um einen wert: "setlength(<array>,i+1)" i ist eine variable mit der ich die zeilen zähle
So dann habe ich das problem: ich erhöhe die länge, und wenn ich dann schon etwas im array hatte, löscht er die ersten zeilen, und schreibt nur etwas in die letzte. so sieht der array dann aus array mit länge 1: <array>('<wert1>') array mit länge 2: <array>('','<wert2>') diese information habe ich aus der Watch List! |
Re: setlength bei dynamischen array
Hallo Scottsman,
vielleicht hilft das?
Delphi-Quellcode:
procedure AddItem(var AnArray: TMyTypeArray; const AnItem: TMyType);
var iLast : Integer; begin iLast := Length(AnArray); SetLength(AnArray, Succ(iLast)); AnArray[iLast] := AnItem; end; |
Re: setlength bei dynamischen array
Delphi-Quellcode:
Bildschirmausgabe:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type tIntArray = array of Integer; var intArray: tIntArray; i: Integer; begin SetLength(intArray, 1); IntArray[0] := 13; for i := 0 to High(intArray) do Writeln(intArray[i]); Writeln; SetLength(intArray, 2); IntArray[1] := 16; for i := 0 to High(intArray) do Writeln(intArray[i]); Writeln; Readln; end. Zitat:
|
Re: setlength bei dynamischen array
Hier ist mal mein code!!konnte noch nicht richtig etwas mit den antworten anfangen!!!
Delphi-Quellcode:
[edit=sakura] [code] :arrow: [delphi] Mfg, sakura[/edit]
while not eof(ffinished) do
begin readln(ffinished,temp); if temp = 'M-GET CONFIRMATION (' then begin for m := 0 to 1 do readln(ffinished,temp); mget_conf := mget_conf + 2; extr_line(temp,ar_words,j); if (ar_words[0] = 'MANAGED') and (ar_words[1] = 'OBJECT') and (ar_words[2] = 'CLASS') then begin setlength(a_mget_conf,i+1); a_mget_conf[i] := inttostr(mget_conf) + ';' + ar_words[3]; inc(i); end else begin readln(ffinished,temp); inc(mget_conf); extr_line(temp,ar_words,j); if (ar_words[0] = 'MANAGED') and (ar_words[1] = 'OBJECT') and (ar_words[2] = 'CLASS') then begin setlength(a_mget_conf,i+1); a_mget_conf[i] := inttostr(mget_conf) + ';' + ar_words[3]; inc(i); end; {if 3} end; {else} end; {if 1} inc(mget_conf); end; {while} |
Re: setlength bei dynamischen array
Wenn Du ohnehin ausschließlich mit Strings arbeitest, warum verwendest Du nicht TStringList oä?
|
Re: setlength bei dynamischen array
danke für den hinweis!!
ich habe TStringlist nicht benutzt da ich diesen type nicht kenne!! ich weis überhaupt nicht was es sonst noch alles von modulen in delphi gibt!!in der schule haben wir nur 100 verschiedene zeichenprogramme gemacht und da ist nun eben mal nix mit strings!! :D |
Re: setlength bei dynamischen array
Der Code den Du gezeigt hast, ist OK. Bist Du Dir sicher dass nicht noch Zugriffe aus anderen Bereichen erfolgen?
Trotzdem schliesse ich mich meinem Vorredner an, eine StringList dürfte die bessere Wahl sein. Zudem ist das ständige erhöhen mit SetLength nicht umproblematisch, da es ein Speicherfresser ist. Besser, SetLength in größeren Dosen einsetzen (hat aber mit Deinem Problem nichts zu tun). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz