Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi setlength bei dynamischen array (https://www.delphipraxis.net/25823-setlength-bei-dynamischen-array.html)

Scottsman 13. Jul 2004 09:11


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

choose 13. Jul 2004 09:15

Re: setlength bei dynamischen array
 
Hallo Scottsman,

der OH ist folgendes zu entnehmen:
Zitat:

Zitat von OH
Bei einer langen String- oder einer dynamischen Array-Variable weist SetLength dem mit S referenzierten String oder Array die angegebene Länge zu. Dabei bleiben die Zeichen im String oder die Elemente im Array erhalten, jedoch ist der Inhalt des neu zugewiesenen Speicherbereichs nicht definiert.

Demzufolge, kann ich Dein Problem nicht ganz nachvollziehen. Könntest Du das etwas genauer aussführen?

Mario 13. Jul 2004 09:21

Re: setlength bei dynamischen array
 
Kannst Du ein Beispiel zeigen, wo Dein Problem auftritt? In entsinne mich auch nicht an solche Effekte.

Scottsman 13. Jul 2004 09:22

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!

choose 13. Jul 2004 09:29

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;

Mario 13. Jul 2004 09:31

Re: setlength bei dynamischen array
 
Delphi-Quellcode:
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.
Bildschirmausgabe:
Zitat:

13

13
16
Ich kann den Effekt also nicht nachvollziehen.

Scottsman 13. Jul 2004 09:37

Re: setlength bei dynamischen array
 
Hier ist mal mein code!!konnte noch nicht richtig etwas mit den antworten anfangen!!!

Delphi-Quellcode:
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}
[edit=sakura] [code] :arrow: [delphi] Mfg, sakura[/edit]

choose 13. Jul 2004 09:44

Re: setlength bei dynamischen array
 
Wenn Du ohnehin ausschließlich mit Strings arbeitest, warum verwendest Du nicht TStringList oä?

Scottsman 13. Jul 2004 09:47

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

Mario 13. Jul 2004 09:48

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.
Seite 1 von 2  1 2      

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