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 For Schleife in 5er Schritten (https://www.delphipraxis.net/105523-schleife-5er-schritten.html)

XXcD 23. Dez 2007 17:36


For Schleife in 5er Schritten
 
Hallo,
ich schreibe gerade ein Verwaltungsprogramm wo eine Kundenliste in ein Listview aufgelistet werden soll.
Soweit funktioniert auch alles bis auf die kleinigkeit, dass ich eine For Schleife in 5er Schritten durchlaufen lassen müsste.

Wenn ich die Variable ändern will bekomme ich eine Fehlermeldung

Delphi-Quellcode:
 for j:=0 to FResult.FieldsCount-1 do
          begin
{Befehl}
j:=j+5;
end;
Geht das überhaupt die For Schleife in 5er Schritten zu durchlaufen? Bei googel und in dem Forum konnte ich nichts finden was mir weiterhilft.

Hier noch der Code:

Delphi-Quellcode:
          for j:=0 to FResult.FieldsCount-1 do
          begin
                with Listview do
      begin
        LI:=Items.Add;
        LI.Caption:=FResult.FieldValue(j);
       LI.SubItems.Add(FResult.FieldValue(j+1));
        LI.SubItems.Add(FResult.FieldValue(j+2));
        LI.SubItems.Add(FResult.FieldValue(j+3));
        LI.SubItems.Add(FResult.FieldValue(j+4));
      end;
        FResult.Next;
      end;

Klaus01 23. Dez 2007 17:38

Re: For Schleife in 5er Schritten
 
Guten Abend,
ist es nicht möglich die FOR Schleife durch eine While Schleife zu ersetzen.
Da kannst Du die Schrittweite selber definieren.

Grüße
Klaus

Apollonius 23. Dez 2007 17:40

Re: For Schleife in 5er Schritten
 
Delphi lässt for-Schleifen nur in Einser-Schritten zu. So kann die for-Schleife nämlich deutlich besser optimiert werden als beispielsweise in C++. Wenn du so ein Konstrukt brauchst, kannst du auch eine while-Schleife nehmen.

marabu 23. Dez 2007 17:44

Re: For Schleife in 5er Schritten
 
Hallo,

hier noch ein Ansatz:

Delphi-Quellcode:
for j := 0 to Pred(FResult.FieldsCount) div 5 do
begin
  with Listview do
  begin
    LI := Items.Add;
    n := j * 5;
    LI.Caption := FResult.FieldValue(n);
    LI.SubItems.Add(FResult.FieldValue(n+1));
    LI.SubItems.Add(FResult.FieldValue(n+2));
    LI.SubItems.Add(FResult.FieldValue(n+3));
    LI.SubItems.Add(FResult.FieldValue(n+4));
  end;
  FResult.Next;
end;
Frohe Weihnachten

himitsu 23. Dez 2007 17:46

Re: For Schleife in 5er Schritten
 
Code:
for i := Anfang div 5 to Ende div 5 do
  (i * 5) = 5er-Schritte :zwinker:
Delphi-Quellcode:
for j := 0 to (FResult.FieldsCount - 1) div 5 do begin
  with Listview do begin
    LI := Items.Add;
    LI.Caption := FResult.FieldValue(j * 5);
    LI.SubItems.Add(FResult.FieldValue((j * 5) + 1));
    LI.SubItems.Add(FResult.FieldValue((j * 5) + 2));
    LI.SubItems.Add(FResult.FieldValue((j * 5) + 3));
    LI.SubItems.Add(FResult.FieldValue((j * 5) + 4));
  end;
  FResult.Next;
end;
oder
Delphi-Quellcode:
for j := 0 to (FResult.FieldsCount - 1) div 5 do begin
  k := (j * 5);
  with Listview do begin
    LI := Items.Add;
    LI.Caption := FResult.FieldValue(k);
    LI.SubItems.Add(FResult.FieldValue(k + 1));
    LI.SubItems.Add(FResult.FieldValue(k + 2));
    LI.SubItems.Add(FResult.FieldValue(k + 3));
    LI.SubItems.Add(FResult.FieldValue(k + 4));
  end;
  FResult.Next;
end;

XXcD 23. Dez 2007 17:50

Re: For Schleife in 5er Schritten
 
Jo danke für die schnellen Antworten.
Ich probier das gleich mal aus.

Und euch auch Frohe Weihnachten :-D :-D :-D

grenzgaenger 23. Dez 2007 17:51

Re: For Schleife in 5er Schritten
 
wie bereits erwähnt, kann in einer for schleife die zählvariable nicht geändert werden, da sie iaR in das register übertragen wird und dann über die schleife geloopt wird (jnz). hat mit der optimierung zu tun... und ist auch sinnvoll. wenn du hier keine optimierung haben möchtest...nimm 'ne while oder 'ne repeat schleife... willst die optimierung haben, kannst die zählvariable durchmultiplizieren mit deinem gewünschten wert. dies nur zum verständnis, da hier schon alles gesagt wurde.

grenzgaenger 23. Dez 2007 17:55

Re: For Schleife in 5er Schritten
 
kurzer nachtrag. was mir auffällt ist, dass du eigentlich noch 'ne kleine zweite schleife machen kannst...

so in etwa:

Code:
for i := 0 to x do
  for j := 0 to 5 do
   with xxx do
     add(blabla[j]);
so sollts eigentlich elegant klappen. <HTH>

Jürgen Thomas 24. Dez 2007 10:34

Re: For Schleife in 5er Schritten
 
Hallo,

spricht eigentlich irgendetwas gegen das folgende Verfahren:
Delphi-Quellcode:
for j:=0 to FResult.FieldsCount-1 do
begin
  if (j mod 5 = 0)
  do begin
    //  mach etwas nur im ersten und danach jedem weiteren 5. Schritt
  end;
end;
:lol: Jürgen

Thanatos81 24. Dez 2007 10:42

Re: For Schleife in 5er Schritten
 
Funktionieren wird das natürlich auch. Allerdings ist es bei sehr großen Datenmengen ineffezient nur in 20% der Durchläufe etwas zu machen ;-) Wobei das reine iterieren wie es bei dem Beispiel ja passieren wird, kaum ins Gewicht fallen wird ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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