Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi While-Schleife wird Ignoriert ?!?! (https://www.delphipraxis.net/27166-while-schleife-wird-ignoriert.html)

Nalincah 5. Aug 2004 11:02


While-Schleife wird Ignoriert ?!?!
 
Zitat:

[Hinweis] uDatevExport.pas(404): FOR oder WHILE Schleife wird nicht durchlaufen - gelöscht
zeigt der mir an.

Warum? Hier der source:

Delphi-Quellcode:
MS.Write(s[1],1);
Inc(ByteCount);
// Restliche Platz mit Füllzeichen auffüllen (Bis 256 Bytes)
s := StringOfChar(#00,256-ByteCount);
MS.Write(s[1],Length(s));

while ((SizeOf(FS_ED) + SizeOf(MS)) mod 256 = 0) do
begin
  s := #00;
  FS_ED.Write(s,1);
end;
FS_ED.Position := SizeOf(FS_ED);

Bernhard Geyer 5. Aug 2004 11:15

Re: While-Schleife wird Ignoriert ?!?!
 
FS_ED und MS sind beides Objektreferenzen (Zeiger) und diese sind immer 4 Byte groß (SizeOf(...)).
D.h
Delphi-Quellcode:
while ((SizeOf(FS_ED) + SizeOf(MS)) mod 256 = 0)
liefert immer False und schleife wird nicht durchlaufen.
Delphi-Quellcode:
while ((FS_ED.Size + MS.Size) mod 256 = 0) do
sollte funktionieren, da jetzt die größe des Streams (welches Du verwendest) abgefragt wird.

Nalincah 5. Aug 2004 11:58

Re: While-Schleife wird Ignoriert ?!?!
 
Delphi-Quellcode:
  while (FS_ED.Size + MS.Size mod 256 <> 0) do
    begin
      s := #00;
      FS_ED.Write(s,1);
    end;
Hier wird doch FS_ED eigentlich jedesmal um 1 größer, oder?
Bei mir irgendwie nicht?

GuenterS 5. Aug 2004 12:17

Re: While-Schleife wird Ignoriert ?!?!
 
Der Inhalt schon die größe des Zeigers ändert sich aber nicht.


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