AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

setlength bei dynamischen array

Ein Thema von Scottsman · begonnen am 13. Jul 2004 · letzter Beitrag vom 13. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Scottsman

Registriert seit: 9. Mär 2004
Ort: Huncherange
9 Beiträge
 
Delphi 5 Professional
 
#1

setlength bei dynamischen array

  Alt 13. Jul 2004, 10:11
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!ü!
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#2

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:15
Hallo Scottsman,

der OH ist folgendes zu entnehmen:
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?
gruß, choose
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:21
Kannst Du ein Beispiel zeigen, wo Dein Problem auftritt? In entsinne mich auch nicht an solche Effekte.
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Scottsman

Registriert seit: 9. Mär 2004
Ort: Huncherange
9 Beiträge
 
Delphi 5 Professional
 
#4

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:22
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!
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#5

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:29
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;
gruß, choose
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:31
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.
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Scottsman

Registriert seit: 9. Mär 2004
Ort: Huncherange
9 Beiträge
 
Delphi 5 Professional
 
#7

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:37
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] [delphi] Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#8

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:44
Wenn Du ohnehin ausschließlich mit Strings arbeitest, warum verwendest Du nicht TStringList oä?
gruß, choose
  Mit Zitat antworten Zitat
Scottsman

Registriert seit: 9. Mär 2004
Ort: Huncherange
9 Beiträge
 
Delphi 5 Professional
 
#9

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:47
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!!
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: setlength bei dynamischen array

  Alt 13. Jul 2004, 10:48
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).
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz