Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 27.01.09 11:07 
Hi, Delpher,

wann und wie muss ich SetLength (allgemein) korrekt setzen?
ist der Code so richtig: [Hab Schiss, ihn so "auszuprobieren"]?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var rx: array of String[3];

procedure Tform1.fuelle_listbox1Kla(sender:tobject);
begin
  listbox1.Clear;
  zk := 0; inh := 'xxx';
  QSchueler.First;  
  while not QSchueler.eof do
  begin
    if (QSchueler.fieldbyname('KLASSE').asstring <> '')  and
       (QSchueler.fieldbyname('KLASSE').asstring <> inh) then
    begin
      listbox1.Items.Add(QSchueler.fieldbyname('KLASSE').asstring);
      inh := QSchueler.fieldbyname('KLASSE').asstring; 
      setlength(rx, zk+1); rx[zk] := inh; inc(zk);         // richtig ??
    end;
    QSchueler.next;
  end;
  listbox1.Visible := true;
end;


Danke für Hilfe/Erklärung,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 27.01.09 11:12 
Moin,

erstmal solltest Du für jede Anweisung eine neue Zeile im Quellcode anfangen. Ist einfach besser lesbar.
Mit SetLength setzt Du einfach die Länge des Arrays.
Wenn Du SetLength(array, 5) aufrufst, hast Du hinterher ein Array mit 5 Elementen [0..4].

Gruß,
Jens

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 27.01.09 11:40 
Danke, Jens, dann müsste mein Code ja ok sein, oder?
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 27.01.09 11:43 
*hust* :oops: grade hatte ich einen denkfehler.
Es ist schwer zu lesen, mit 3 Anweisungen in einer Zeile, aber es scheint korrekt zu sein.
Bedenke aber, dass das Aufrufen von SetLength relativ viel Zeit braucht, je nach dem, wie oft deine Schleife durchläuft, wäre es sehr vorteilhaft, SetLength nur einmal aufzurufen. (Einen Unterschied merkt man nicht vor 1000++ Aufrufen, denke ich ;) )
Sollte dir die Arraygröße vorher nicht bekannt sein, vergrößere dein Array vielleicht in Stufen: Erstmal auf 10000 setzen, dann vor dem Füllen abfragen, ob du bereits bei High(myArray) angelagt bist, falls ja, das Array wieder um 10000 vergrößern. Am Ende dann das Array, falls nötig, wieder verkleinern.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 27.01.09 13:33 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
Bedenke aber, dass das Aufrufen von SetLength relativ viel Zeit braucht,

weil der Speicher neu allokiert wird und damit alle(!) Werte erneut ins Array geschrieben werden müssen.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 27.01.09 13:57 
Danke, ihr zwei!
Detlef

_________________
ut vires desint, tamen est laudanda voluntas