Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Möglichkeiten einen Schritt der for-Schleife zu überspringen (https://www.delphipraxis.net/1248-moeglichkeiten-einen-schritt-der-schleife-zu-ueberspringen.html)

Hansa 6. Nov 2002 00:51

Hi Luckie,

Warum soll das denn nicht gehen ? :roll: Setze ich INNERHALB der Schleife die Zähler-Variable auf einen anderen Wert nimmt er den zugewiesenen als nächsten und macht weiter, als sei nichts geschehen.

Wenn innerhalb der Schleife z.B. jeder zweite Wert genommen werden soll, d.h. einer wird jeweils übersprungen, würde ich gennauso vorgehen, nur halt i mod 2 = 0 verwenden (oder = 1).

Mit AddItem wird dannn nur jeder zweite Wert mit berücksichtigt.

Gruß
Hansa

Luckie 6. Nov 2002 00:55

Zitat:

Warum soll das denn nicht gehen ? Setze ich INNERHALB der Schleife die Zähler-Variable auf einen anderen Wert nimmt er den zugewiesenen als nächsten und macht weiter, als sei nichts geschehen.
Genau das habe ich ja versucht in meinem Beispiel, aber das kompiliert dir Delphi nicht.

Hansa 6. Nov 2002 01:31

Hi,

tatsächlich, habe es ausprobiert. So soll man es ja normalerweise auch nicht machen. Habe auch eine Stelle im Programm, wo ich das brauche,aber wo ? Und das geht nicht!!! :mrgreen: So ein Mist. In einem kleinen Programm brauch ich das. Na ja, dann eben mit while, ist logischer und sicherer, wenn es geht. Diese Sch... Exit-Sachen.

Jetzt bin ich ja zumindest vorgewarnt und behaupte das Gegenteil. Aber die Compiler-Schalter müßte man sich doch noch ansehen.

Gruß
Hansa

P.S.: Bist Du echt in Tennessee? Dann versteh ich die Uhrzeit. :cat: Die Katze kann ja dann Jack Daniels trinken.

Luckie 6. Nov 2002 01:36

Man muß sich mal den ASM-Code für so eine for-Schleife ankucken. Wenn du da die Zählvarible änderst, wirst du wohl den Inhalt der Register ordentlich durcheinander bringen und deswegen verhindert Delphi die Kompilierung.

Allerdings kenne ich mich mit ASM nicht besonders aus, weswegen ich mich da nicht so festlegen will, ist nur eien Vermutung.

In Tennessee bin ich leider nicht, da wäre ich aber gerne, in Memphis eben oder Los Angles am Strand oder so. Und den Jack Daniels trinke ich schon selber, mach dir da mal keine Sorgen. :P

jbg 6. Nov 2002 06:11

Möglich wäre es auch so:
Code:
for i := 0 to 9 do
begin
  if i = 4 then Continue;
  tuedies := unddas;
end;

Daniel B 6. Nov 2002 06:33

Hallo Christian,

Zitat:

Zitat von Christian Seehase
Wenn es definitiv nur ein Eintrag ist, könnte man sich auch eine Form Property einrichten, die jeweils den Index des zuletzt gewählten Eintrages enthält (initial -1). Dann hätte man immer den Index des Eintrages, dass beim Wechsel des Selected Items auf 0 gesetzt werden müsste, und könnte gezielt, via ListView1.Selected.Index, den einen Eintrag ansprechen, bei dem auf 1 gesetzt werden muss. Dieser Index kommt dann in die Property.
Das könnte sich, zumindest bei vielen Werten, ausgesprochen positiv auf die Laufzeit auswirken. (im Gegensatz zum Durchlauf durch alle Items)

Das hört sich interessant an. Es ist allerdings schon möglich mehrere Einträge gleichzeitig zu löschen. Das Maximum an Einträgen ist 200. Somit ist es mit der Geschwindigkeit, nicht aoo arg schlimm, dennoch interessiert mich das. Man(n) will ja auch was neues Lernen.

@Daniel,

so habe ich es bisher gelöst, dennoch Danke.
Ich bin nur auf der suche, nach etwas Performance-Technischen möglichkeit, oder wie man sachen leichter und einfacher machen kann, ohne immer das zu benutzen, was sich am leichtesten schreiben lässt. :mrgreen:

Zitat:

Zitat von Hansa
Warum soll das denn nicht gehen ? Setze ich INNERHALB der Schleife die Zähler-Variable auf einen anderen Wert nimmt er den zugewiesenen als nächsten und macht weiter, als sei nichts geschehen.

Irgendwie komme ich im Kopf in eine Endlosschleife. :shock: :roll: :mrgreen:
Also, 0 to 5. Der dritte soll übersprungen werden.
i hat gerade 2, ich schreibe in diesem Druchgang i := i +1, der nächste durchgang ist bereits 3, somit hätte ja meine änderung nichts bewirkt. Ich müsste es doch auf i := i +2 setzen. Eigentlich müsste ich i 2 durchläufe vorher +2 setzen, bei 1 schon. Aaarghh, mein Kopf expodiert gleich. Es ist eh schon zu früh. :freak:
ODer? Wenn ich mir da so durchdenke, werd ich ständig verwirrt. Hmm...

Grüsse, Daniel :hi:

d3g 6. Nov 2002 14:39

Hallo Luckie,

Zitat:

Zitat von Luckie
Du kannst die Zählvariable innerhalb der for-Schleife nicht verändern!

Es geht mit einem schmutzigen Trick:

Code:
[b]procedure[/b] Produce();
[b]var[/b]
  i: Integer;
  p: ^Integer;
[b]begin[/b]
  [b]for[/b] i := 0 [b]to[/b] 9 [b]do[/b]
    [b]if[/b] (i = 4) [b]then begin[/b]
      ShowMessage(IntToStr(i));
      p := @i;
      p^ := i + 1;
      ShowMessage(IntToStr(i));
    [b]end[/b];
[b]end[/b];
MfG,
d3g

Motzi 6. Nov 2002 14:39

Man braucht das gar nicht irgendwie kompliziert über ASM machen.. es reicht schon ganz normal über einen Pointer auf die Zählvariable zuzugreifen:

for i := 0 to x do
Integer(Pointer(@i)^) := i + 1;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 2 von 2     12   

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