![]() |
Schleife läuft rückwärts trotz Verwendung der Zählvariable
Moin...
Eine meiner for-Schleifen läuft rückwärts, obwohl die Schleifenvariable verwendet wird. Seit wann optimiert der Compiler sowas? Der Switch steht übrigens auf Verwendung von SetRange... TblMSys ist eine TTable (Paradox) MSysInfo ist eine TKbmMemoryTable (Speichertabelle) Es handelt sich um Delphi 7 Enterprise.
Delphi-Quellcode:
const
LoadFields : Array[0..6] of String = ('SO', 'KO', 'ST', 'KT', 'AT', 'LA', 'FG'); for Loop := 1 to Length(LoadFields) do begin {$IFDEF DB_MSSQL} TblMSys.SQL.Text := 'SELECT * FROM Z4MSYS WHERE ART=''' + LoadFields[Loop - 1] + ''''; TblMSys.Open; {$ELSE} TblMSys.SetRange([LoadFields[Loop - 1]], [LoadFields[Loop - 1]]); {$ENDIF} while not TblMSys.Eof do begin MSysInfo.Append; MSysInfo.FieldByName('ART').asString := TblMSys.FieldByName('ART').asString; // Noch ein paar Felder... MSysInfo.FieldByName('F1').asString := TblMSys.FieldByName('F1').asString; MSysInfo.Post; TblMSys.Next; end; end; |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Exakt das gleiche Thema hatten wir erst vor Kurzem.
Des Rätsels Lösung: Die Schleife läuft zwar rückwärts, die Schleifenvariable wird allerdings überhaupt nicht zum Zugriff auf das Array benutzt. Und wieder frage ich mich, wie man bloß mit Optimierungen debuggen kann... |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Und was ist das?
TblMSys.SetRange([LoadFields[Loop - 1]], [LoadFields[Loop - 1]]); Falls es dir aufgefallen ist, ich habe extra betont, dass die Zählvariable sehr wohl verwendet wird... |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Hallo,
Zitat:
Gruß xaromz |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
so etwas ist mir auch schon aufgefallen mit D6 oder D7 (weis nimmer)
hatte auch die zählvar verwendet (!) |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Zitat:
Wenn ich die Schleife debugge, dann wird das Array tatsächlich von hinten nach vorne durchlaufen: Erst FG, dann LA, dann AT ... usw . Edit: Wie soll ich denn die Array-Werte bekommen, wenn Delphi sie nicht verwendet? -hm- |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Zitat:
|
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Och Jungs :stupid: . Ich habe nicht auf einen Thread, in dem die Sache schon längst gelöst wurde, verwiesen, damit hier das gleiche Thema noch einmal diskutiert wird. Und weil bald Weihnachten ist, gibts sogar einen Direktlink:
![]() Zitat:
Zitat:
|
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
na rückwärts eben :wink:
Der Zugriff auf die Daten erfolgt über einen Zeiger, der vor Beginn der Schleife initialisiert und innerhalb der Schleife inkrementiert wird. Mit der Schleifenvariablen muß dann nur noch die Anzahl der Durchläufe geprüft werden. Dabei ist es unerheblich, ob vorwärts oder rückwärts gezählt wird. Rückwärts gehts es ein wenig schneller, weil die Abbruchbedingung einfacher ist. Gruß Hawkeye //Edit: hmmm, ein Tick zu spät... |
Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab
Hallo,
Zitat:
Wenn die Schleifenvariable zur Indizierung eines Arrays genutzt wird, dann benötigt Delphi die Variable nicht. Ich erkläre das am Besten mal an einem Beispiel: Wir zählen von 1 bis 10 und haben ein Array [1..10] of Integer Wenn wir das so schreiben:
Delphi-Quellcode:
dann baut Delphi das ungefähr so um:
var
C: Integer; A: array [1..10] of Integer; begin ... initialisieren for C := 1 to 10 do Result := Result + A[C]; end;
Delphi-Quellcode:
Wie man sieht, wird C für den Zugriff auf das Array nicht benötigt.
var
C: Integer; A: array [1..10] of Integer; P: ^Integer; begin ... initialisieren C := 10; P := @A[1]; repeat Result := Result + P^; Inc(P); Dec(C); until C = 0; end; Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
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