[GELÖST] Writestring - ich steh auffn schlauch :D

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Writestring - ich steh auffn schlauch :D

BeitragMo, Apr 04, 2011 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
BMax macht wieder irrsinnig große Probleme: Ich möchte meinen CO2 Packager nach BMax übersetzen (um in via MaxGUI für den User leichter bedienbar zu machen), jedoch hat BMax was zu meckern: Wo man in BB noch einfach "WriteString [stream], [string]" schreiben konnte, erwartet BMax noch einen weiteren Parameter, nähmlich die größe des strings. Ich kenne aber die größe des zu schreibenden strings nicht Sad. Wie kann ich die rausfinden?

Nur nochmal zum verständnis: Der User wählt irgendeine Datei auf seiner Festplatte aus. Danach klickt er auf "Container" -> "Speichern unter..." und wählt den speicherplatz aus. Nun geht das Programm wie folgt vor: Dateinamen lesen: aufschreiben (via WriteString), Dateigröße lesen: aufschreiben(via WriteInt), Dateiinhalt Byte für Byte auslesen + aufschreiben (via WriteByte). Das Problem: Ich kenne die länge des strings des Dateinamens nicht und weiß auch nicht wie ich sie herausfinden könnte...

Achja, da fällt mir noch eine Frage ein: Wenn ich in BMax via WriteString einen String in eine Datei schreibe, kann ich ihn dann fehlerfrei mit BB (und dem Befehl ReadString) auslesen?

ich hoffe, mein Problem kann man verstehen,
mfG,
CO2

PS.: Ich habe die suche benutzt, kam aber nichts raus (vllt. verwende ich sie auch falsch Very Happy)
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Do, Apr 07, 2011 20:52, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMo, Apr 04, 2011 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
Local txt:String = "Wie Lang bin ich?"
Print(txt + " " + txt.Length)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

skey-z

BeitragMo, Apr 04, 2011 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Laut Hilfe benötigt Writestring nur 2 Argumente, zum einen einen stream:TStream und den String selber
Code: [AUSKLAPPEN]

Function WriteString( stream:TStream,str$ )


Mögliche Fehlerquellen
(Super-)Strict verwenden
aktuelle Version?
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
  • Zuletzt bearbeitet von skey-z am Mo, Apr 04, 2011 20:51, insgesamt einmal bearbeitet

Thunder

BeitragMo, Apr 04, 2011 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
1. WriteString erwartet nicht als Parameter die Stringlänge, sondern wie BB nur die Datei und den String.
2. Die Größe einer Stringvariable strvar bekommst du über strvar.length
3. BB's WriteString ist nicht kompatibel zu der Variante in BlitzMax. BB schreibt zusätzlich zum String noch die Stringlänge in die Datei. BlitzMax' Version tut das nicht.
-- Du könntest aber vor jedem WriteString ein WriteInt mit der Stringlänge einfügen. --
4. Die Funktionen ReadString sind ebenfalls nicht kompatibel. Aber das wäre schon gelöst, wenn du obigen Ratschlag befolgst.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DaysShadow

BeitragMo, Apr 04, 2011 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax Hilfe hat Folgendes geschrieben:
Function WriteString( stream:TStream,str$ )


Wo genau bitte erwartet dort die Funktion die Länge des Strings?

Und ob das auslesen mit BB klappt hängt davon hab welche Art von String BB einliest, ob ASCII, UTF8 oder UTF16.
BlitzMax schreibt, wenn ich mich nicht irre, UTF16 Strings, also 2 Byte pro Zeichen.

Edit: Ah, Xeres/skey-z/Thunder waren schneller Wink
Blessed is the mind too small for doubt
 

CO2

ehemals "SirMO"

BeitragMo, Apr 04, 2011 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke für die Hilfe! Werd ich mal ausprobieren.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

mpmxyz

BeitragDi, Apr 05, 2011 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@DaysShadow
BlitzMax liest und schreibt standardmäßig "Byte-Strings". (Umweg über CString)
Nur bei TextStreams kann es das von dir beschriebene Verhalten geben.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

CO2

ehemals "SirMO"

BeitragDo, Apr 07, 2011 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, habe nun ein paar Funktionen zusammengebastelt, welche aber noch nicht funktionieren Sad

BlitzMax: [AUSKLAPPEN]
Function WriteString2(Dateiname:TStream, str:String) 'Schreibfunktionfunktion
Local stringsize:Int = str.Length 'Länge des Strings auslesen
WriteByte Dateiname, stringsize 'Aufschreiben der Länge
WriteString Dateiname, str 'Aufschreiben des strings
End Function

Function ReadString2:String(Dateiname:TStream) 'lesefunktion
Local stringsize:Int = ReadByte(Dateiname) 'Auslesen der stringgröße
Local str:String = ReadString(Dateiname, stringsize) 'Auslesen des strings
Return str 'String returnen
End Function


Die Fehler sind:
- Es wird die erste zeile immer frei gelassen.
- Ist nicht BB kompatibel (Wenn man mit der WriteString2() Funktion einen String schreibt und ihn mit BB versucht auszulesen gibts nen MAV

Ich hoffe ihr könnt mir helfen,
mfG
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

BtbN

BeitragDo, Apr 07, 2011 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm halt nen Int statt nen Byte. 255 Zeichen max länge find ich persönlich ohnehin sehr knapp.

Xeres

Moderator

BeitragDo, Apr 07, 2011 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann auch nicht kompatibel sein, da bb natürlich Int erwartet während du byte schreibst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDo, Apr 07, 2011 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, mit dem Int scheints zu klappen, besten dank jungs Very Happy

(Hier noch mal der Code mit dems klappt: BlitzMax: [AUSKLAPPEN]
Function WriteString2(Dateiname:TStream, str:String)
Local stringsize:Int = str.Length
WriteInt Dateiname, stringsize
WriteString Dateiname, str
End Function

Function ReadString2:String(Dateiname:TStream)
Local stringsize:Int = ReadInt(Dateiname)
Local str:String = ReadString(Dateiname, stringsize)
Return str
End Function
)

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group