Dateiname wird nicht komplett übernommen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Dateiname wird nicht komplett übernommen?

BeitragMi, März 31, 2010 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.
Ich habe gerade eine Speicherroutine für mein Spiel geschrieben.
Wenn ich den Pfad hardcode, dann speichert er auch alles richtig ab.
Wenn ich aber eine Benutzereingabe für den Namen zulasse, dann fällt alles dahinter in der Datei weg.
Das seltsame aber: Ich lasse mir vorher im Programm den kompletten Pfad als String ausgeben. Dieser stimmt auch immer.
wenn er dann die Datei speichert, dann stimmt der Ordner und der vorgegebene Teil des Namens überein, aber der Teil mit der Benutzereingabe und die Endung fallen weg.

Hier mal der Code:

BlitzMax: [AUSKLAPPEN]
Function SaveLevel()
Local c:Int
Local w:String
Local word:String
Local DateiName:String = "Level/Level"
FlushKeys
Repeat
Cls
c = GetChar()
w = Chr(c)
word = word + w
DrawText(word, 100, 100)
Flip
Until KeyHit(KEY_ENTER)

Local sNew:String = "New"
word = word

Dateiname = Dateiname + word + ".dat" 'HIER wird alles zusammengefügt
FlushKeys

Repeat
Cls
DrawText(Dateiname, 300, 300) 'HIER zeigt er alles richtig an
Flip
Until KeyHit(KEY_ENTER)


Local Datei:TStream = WriteStream(Dateiname) 'HIER geht der Teil word und ".dat" irgendwie verloren


Wie ihr sehen könnt, habe ich entsprechende Stellen kommentiert.

Ich kann mir echt keinen Reim darauf machen, warum er das ganze falsch abspeichert.
Ich geh mal davon aus, dass der Fehler bei mir liegt.

Hoffentlich kann mir jemand helfen.

Lg, M0rgenstern

EDIT:

Ich hab grade die LadeRoutine geschrieben, bei der passiert genau das gleiche.
Also, die Läd dann entsprechende "falsche" datei sogar:

BlitzMax: [AUSKLAPPEN]
Function LoadLevel()
Local c:Int
Local w:String
Local word:String
Local DateiName:String = "Level/Level"
FlushKeys
Repeat
Cls
c = GetChar()
w = Chr(c)
word = word + w
DrawText(word, 100, 100)
Flip
Until KeyHit(KEY_ENTER)

Local sNew:String = "New"
word = word
Dateiname = Dateiname + word + ".dat"
FlushKeys
Repeat
Cls
DrawText(Dateiname, 300, 300)
Flip
Until KeyHit(KEY_ENTER)

Local Datei:TStream = ReadStream(Dateiname)


LG, M0rgenstern

hamZta

Administrator

BeitragMi, März 31, 2010 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Was gibst du denn für einen Namen ein? Irgendwelche Sonderzeichen darin? Prüf den String word mal genau ob irgendwelche Zeichen drinstehen die da nicht hinsollen.
Blog.

M0rgenstern

BeitragMi, März 31, 2010 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich prüfe den ja. In der ersten Schleife und dann in der zweiten den kompletten Pfad.
Das ganze passiert selsbt wenn ich "1" eintippe.

Lg, m0rgenstern

Xeres

Moderator

BeitragMi, März 31, 2010 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ist einfach Debuggen angesagt: DebuglLog. Schau dir an wie die Pfade tatsächlich aussehen. Benutze Currentdir() um Absolute angaben zu machen, pass' auf, dass auch überall an den richtigen stellen "/" vorkommen und die Ordner existieren.
und die Zuweisung "word = word" kannst du streichen.
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)

Holzchopf

Meisterpacker

BeitragMi, März 31, 2010 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler liegt bei der (hoffentlich noch) spärlichen Inputroutine: Selbstverständlich darfst du nicht einfach blind jedes Zeichen an den String anhängen, sondern nur alles, was nicht Steuerzeichen ist. Bei dir wird beim Enterdrücken noch der Zeilenvorschub angehängt, weshalb der Dateiname dann halt nicht so herauskommt, wie du dir das vorstellst.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragDo, Apr 01, 2010 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist wie Holzchopf schreibt. Die Variable NAME ist bereits 1 Zeichen zu lang, wenn sie aus der Input-Schleife kommt. So müsste es funzen:
BlitzMax: [AUSKLAPPEN]
...
Repeat
Cls
c = GetChar()
w = Chr(c)
word = word + w
DrawText(word, 100, 100)
Flip
Until KeyHit(KEY_ENTER)

Local sNew:String = "New"
word = Left(word, Len(word-1))
...

M0rgenstern

BeitragDo, Apr 01, 2010 10:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, vielen Dank.
Die letzten beiden Beiträge waren die Lösung. Er hat das Enterzeichen übernommen. Warum er allerdings dann bei der Ausgabe keinen Zeilenumbruch angezeigt hat, ist mir ein Rätsel.

Aber auch Allen anderen vielen Dank.
Kurz zur erklärung, warum die Eingabe Routine so spärlich ist: Das ist ein Editor für das Spiel, da ich die Level nicht hardcoden will. Die Levelnamen sind also immer nur "Level1" "Level2" etc. und werden dann später autmoatisch geladen im Spiel. Deshalb hab ich die Eingabe jetzt auch auf die Zahlen von 0 bis 9 beschränkt.
Das word = word stand noch da, weil das noch ein alter Teil war den ich noch nicht ganz gelöscht hatte.


Vielen Dank.

Lg, M0rgenstern

d-bug

BeitragDo, Apr 01, 2010 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, vielleicht weil du die Ausgabe mit DrawText gestaltet hast und dieses keine Zeilenumbrüche unterstützt?!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group