AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Keine 0 schreiben, aber lesen! o.O

Ein Thema von Neutral General · begonnen am 7. Sep 2006 · letzter Beitrag vom 7. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 14:25
Hi,

Ich speichere ein paar Daten mit Hilfe eines Streams ab.
Map.MapPlan[x] bzw TexID dürfen nie 0 sein!

Delphi-Quellcode:
MapPlan: Array of Cardinal;
TexID: Cardinal;
Speichern:

Delphi-Quellcode:
for i:= 0 to High(Map.MapPlan) do
begin
 if Map.MapPlan[i] = 0 then ShowMessage(IntToStr(i)); // Wird nie angezeigt => Keine 0 dabei
 Stream.Write(Map.MapPlan[i],SizeOf(Cardinal));
 ...
end;
Laden

Delphi-Quellcode:
for i:= 0 to High(Map.MapPlan) do
begin
  Stream.Read(TexID,SizeOf(Cardinal));
  if TexID = 0 then ShowMessage(IntToStr(i)); // BAAM Es wird ne 0 gelesen o.O
  ...
end;
Wie kann das sein, dass ich ne 0 rauslese wenn ich nie eine reinschreibe ? -.-

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 14:29
Hast du dir die entstandene Daqtei mal mit einem HexEditor angeguckt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 14:31
Nein noch nicht aber ich meine wenn mein ShowMessage nicht anspringt, wieso sollte er denn eine reinschreiben ?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von vlees91
vlees91

Registriert seit: 19. Apr 2004
843 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 14:48
evtl ist es nichts, aber genau deswegen macht IntToStr eine 0 raus?
vlees91
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 14:54
Zitat von Neutral General:
Nein noch nicht aber ich meine wenn mein ShowMessage nicht anspringt, wieso sollte er denn eine reinschreiben ?
Genau das sollst du ja feststellen, in dem du die Datei mal anguckst, ob da wirklich das drinne steht, was du meinst reinzuschreiben.

Wäre übrigens das erste gewesen, was ich gemacht hätte, bevor ich hie rim Forum gepostet hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 15:02
Das einzige, das ich mir vorstellen kann ist, dass beim Lesen was schiefgeht.
Delphi-Quellcode:
for i:= 0 to High(Map.MapPlan) do
begin
  Stream.Read(TexID,SizeOf(Cardinal));
  if TexID = 0 then ShowMessage(IntToStr(i)); // BAAM Es wird ne 0 gelesen o.O
  ...
end;
Wenn TexID uninitialisiert ist, steht meisstens 0 drinnenstehn.
Es kann gut sein, dass du was in den Stream reinschreibst, und es dann gleich wieder auslesen willst - ohne die Position auf 0 zu setzen. D.h. er steht am Ende des Streams, damit liest er 0 Bytes aus dem Stream, schreibt 0 Bytes in die Variable TexID rein und es bleibt die 0 darin uebrig.
Deswegen wuerde ich auch generell immer mitzaehlen, wieviele Bytes in den Stream geschrieben und gelesen wurden. Die Anzahl der gelesenen/gerschrieben Bytes steht uebrigens im Ergebnis von Read und Write.

greetz
Mike

PS: Ein Blick in die Datei zeigt eigentlich immer die Problemstelle auf, und erspart uns Spekulationen ueber evt. Fehlerursachen
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 15:02
Er hat mir seinen Code per ICQ geschickt, und ich glaub ich weiß, was das Problem ist:

Er bastelt sich nen MemoryStream und macht LoadFromFile. Dadurch steht die Position am Ende des Streams und wenn er jetzt ließt, kriegt er nur lauter Nullbytes.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 15:10
Moin Michael,

Dein Code lässt nicht erkennen, ob Du den Stream vor dem Einlesen geschlossen und wieder geöffnet hast.
Wenn nicht, solltest Du vor dem Auslesen mal Position auf 0 setzen (vor dem Schreiben natürlich auch).
Sonst sprichst Du die falschen Stellen an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 17:24
Ehm es sind zwei verschiedene Proceduren und Stream ist eine lokale Variable vom Typ TMemoryStream, die in beiden Funktionen benutzt wird. Und der Code wird auch nicht hintereinander ausgeführt.. Der eine halt wenn man eine Map laden will und der andere wenn man sie speichern will

EDIT: Jedoch fällt mir grad auf das der Fehler gar nicht in einer der beiden procedure auftaucht -.-
Ich hab soviele ShowMessages zum Debuggen benutzt, das ich nicht gemerkt hab das die AV (und auch die 0en) erst in der
Draw-Methode der Map erzeugt werden -.-^^

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Keine 0 schreiben, aber lesen! o.O

  Alt 7. Sep 2006, 17:27
Ich denke mal, dass LoadFromFile auch den Positionszeiger nach ganz hinten setzt. Also einfach mal Position:=0 machen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.
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