ReadString() Bug?

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

ReadString() Bug?

Beitrag von Thorsten1867 »

Scheinbar wird nicht dasselbe ausgelesen, was geschrieben wurde:

Code: Alles auswählen

Test.s = "Das ist ein Test"
Debug "--- Schreiben ---"
FId = CreateFile(#PB_Any, "E:\Temp\Test.dat")
If FId
  Debug "Text: " + Test + " ("+Str(Len(Test))+")"
  WriteString(FId, Test)
  WriteLong(FId, Len(Test))
  Debug "Länge: "+Str(Len(Test))
  CloseFile(FId)
EndIf
Debug "--- Lesen ---"
RId = ReadFile(#PB_Any, "E:\Temp\Test.dat")
If RId
  Test.s = ReadString(RId)
  Debug "Text: " + Test + " ("+Str(Len(Test))+")"
  TestLen.l = ReadLong(RId)
  Debug "Orginallänge: "+Str(TestLen)
EndIf
--- Schreiben ---
Text: Das ist ein Test (16)
Länge: 16
--- Lesen ---
Text: Das ist ein Test (17)
Orginallänge: 0
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ReadString() Bug?

Beitrag von Kiffi »

PB-Hilfe hat geschrieben: [ReadString()] Liest einen String aus der '#Datei', bis ein 'End Of Line'
(deutsch: "Ende der Zeile") Zeichen gefunden wird (Unix- und
DOS-Dateiformate werden unterstützt).
... oder aber vorher EOF() eintritt.

also wird Dein Long ebenfalls mit ReadString() gelesen

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Sollte WriteString() nicht genau dies EOF() am Ende des Strings anhängen?
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Thorsten1867 hat geschrieben:Sollte WriteString() nicht genau dies EOF() am Ende des Strings anhängen?
WriteString schreibt doch kein EOF() (end of file) hinterm string :mrgreen:
Wenn Du Strings mit anderen Daten mixt, mußte selber für eine Trennung
sorgen. In früheren Versionen wurde wohl automatisch eine 0 angefügt, aber
das ist ja nicht immer gewünscht.

Andere Sprachen haben deshalb meist einen Text und einen Binärmodus, in
PB haste immer einen Binärmodus, so das man Text und andere Daten
mixen kann, aber selber für die Trennung beim mixen zuständig ist.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Bin wohl von PokeS() usw. ausgegangen, wo das Stringende immer automatisch mit angehängt wird.
Hätte nicht gedacht, dass sich ein String im Speicher einfacher auslesen lässt als aus eine Datei. :mrgreen:

Aber Danke, mein komprimiertes Dateiformat funktioniert jetzt. Hätte den String vielleicht direkt aus dem Speicher mit WriteData() schreiben sollen, dann hätte ich mir eine Menge Ärger erspart. :wink:
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ähhh, wieso nimmst du nicht WriteStringN() ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

HeX0R hat geschrieben:Ähhh, wieso nimmst du nicht WriteStringN() ?
Gute Frage, hab ich auch gerade nicht dran gedacht :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Habe ich auch gemacht, nachdem ich wusste wo das Problem zu suchen war.
WriteStringN() hatte ich bisher nur mit Textdateien und Zeilenumbrüchen in Verbindung gebracht und nicht mit dem Setzen eines EndOfString-Zeichens. /:->
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Antworten