Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleifen Problem bei TMemoryStream (https://www.delphipraxis.net/26753-schleifen-problem-bei-tmemorystream.html)

FreewareFire 28. Jul 2004 18:59


Schleifen Problem bei TMemoryStream
 
Hi Leute!

Ich habe da ein richtig doofes Problem... Ich habe einen TMemoryStream mit Daten gefüllt.
In diesem muss ich nun folgendes machen:

zwei einzelne Bytes einlesen (direkt hintereinander)

also sowas:

Delphi-Quellcode:
Stream.ReadBuffer(Byte1, 1);
Stream.ReadBuffer(Byte2, 1);

//Davor kommt dann die Anzahl, wie oft er die Scheife durchlaufen soll (so soll's aussehen):

for anzahl := 0 to xmal do
begin
 
  //und hier liegt das Problem... hier muss eine Schleife rein
  //die abbruchbedingung ist, wenn Byte1=0 und Byte2=-1 - dann soll er die schleife verlassen
  //beginn der schleife
  Stream.ReadBuffer(Byte1, 1); //Byte1 und 2 sind als byte definiert!
  Stream.ReadBuffer(Byte2, 1);
  //ende der schleife

end;
ich habs schon mit repeat until versucht, while und for... irgendwas muss falsch sein, wer kann
mir helfen - Vielen Dank für jeden Tipp!

[edit=sakura] [delphi]Tags Mfg, sakura[/edit]

mischerr 28. Jul 2004 19:45

Re: Schleifen Problem bei TMemoryStream
 
Wie kann denn ein Byte ($00...$ff) "-1" annehmen? :gruebel:

Die Muhkuh 28. Jul 2004 20:15

Re: Schleifen Problem bei TMemoryStream
 
@FreewareFire


Delphi-Quellcode:
Stream.ReadBuffer(Byte1, 1);
Stream.ReadBuffer(Byte2, 1);

//Davor kommt dann die Anzahl, wie oft er die Scheife durchlaufen soll (so soll's aussehen):

for anzahl := 0 to xmal do
begin
 
  //und hier liegt das Problem... hier muss eine Schleife rein
  //die abbruchbedingung ist, wenn Byte1=0 und Byte2=-1 - dann soll er die schleife verlassen
  if (byte1 = 0) and (Byte2 = -1) then
    Break;
  //beginn der schleife
  Stream.ReadBuffer(Byte1, 1); //Byte1 und 2 sind als byte definiert!
  Stream.ReadBuffer(Byte2, 1);
  //ende der schleife

end;

Aber wie mischerr schon sagte, wie kann ein Byte - 1 annehmen?

HaJo 28. Jul 2004 20:27

Re: Schleifen Problem bei TMemoryStream
 
Hallo FreewareFire,

ich sags noch mal etwas verständlicher was oben gemeint war - ein Byte kann dezimal ausgedrückt, Werte von 0 - 255 annehmen! Kann also nicht kleiner als 0 sein, hexadezimal eben $0-$FF :-)

Gruß
Jochen

FreewareFire 28. Jul 2004 20:44

Re: Schleifen Problem bei TMemoryStream
 
Sorry, war mein Fehler - ist shortint, kein byte!

Könnt ihr mir jetzt vielleicht weiterhelfen? Danke!

Die Muhkuh 28. Jul 2004 20:45

Re: Schleifen Problem bei TMemoryStream
 
Hi Ralf,


ist trotzdem der gleiche Code von mir.

FreewareFire 28. Jul 2004 21:27

Re: Schleifen Problem bei TMemoryStream
 
Code:
 
Stream.ReadBuffer(Byte1, 1);
Stream.ReadBuffer(Byte2, 1);

//Davor kommt dann die Anzahl, wie oft er die Scheife durchlaufen soll (so soll's aussehen):

for anzahl := 0 to xmal do
begin

  //und hier liegt das Problem... hier muss eine Schleife rein
  //die abbruchbedingung ist, wenn Byte1=0 und Byte2=-1 - dann soll er die schleife verlassen
  if (byte1 = 0) and (Byte2 = -1) then
    Break;
  //beginn der schleife
  Stream.ReadBuffer(Byte1, 1); //Byte1 und 2 sind als byte definiert! 
  Stream.ReadBuffer(Byte2, 1);
  //ende der schleife

end;

Ist zwar schön und gut, nur nicht korrekt - da fehlt die schleife noch!
Daher das Kommentar über dem Stream! da müsste eine schleife rein, in etwa:

repeat
until ((byte1 = 0) and (byte2 = -1));

zusammen so:

for anzahl := 0 to xmal do
begin

repeat
Stream.ReadBuffer(Byte1, 1); //Byte1 und 2 sind als shortint definiert!
Stream.ReadBuffer(Byte2, 1);
until ((byte1 <> 0) and (byte2 <> -1));

end;

FreewareFire 28. Jul 2004 22:22

Re: Schleifen Problem bei TMemoryStream
 
Hier die Lösung:

for APos := 0 to (doxmal - 1) do
for BPos := SPosition to memstr.Size do
begin
if ((EndBuffer = 0) and (EndBuffer1 = -1)) then
begin
memstr.Position := memstr.Position + 1;
break;
end;

memstr.Read(EndBuffer, 1);
memstr.Read(EndBuffer1, 1);
memstr.Position := memstr.Position -1;

end;


leuchtet sogar ein, oder?

Danke euch allen für eure mühe!


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