Datei überschreiben?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Pousup

Betreff: Datei überschreiben?

BeitragFr, Jan 29, 2010 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin.

Ich stehe vor dem Problem, dass ich verschiedene Types in einer Datei
speichern will, nachdem ich einen Eintrag in einer Listbox (EscapeGUI) erstellt habe.
Wenn ich einen Eintrag erstelle kein Problem - schreibe ich danach
einen zweiten, wird der erste allerdings zweimal in die Datei geschrieben.

Wieso ist das so? Ich rufe nach der Bestätigung (Button-Klick) eine Funktion auf, die
beschreibt, wie die Types gespeichert werden:

Code: [AUSKLAPPEN]

char.character_list = New character_list
   char\name = name_txtfield\caption$
   char\rasse = rasse_txtfield\caption$
   char\klasse = klasse_txtfield\caption$
   
   char_counter = char_counter + 1
   
   datei = WriteFile("data/char_list.txt")
   WriteLine datei, char_counter
   
   For char.character_list = Each character_list
      WriteLine datei, char\name$
      WriteLine datei, char\rasse$
      WriteLine datei, char\klasse$
   Next
   
   CloseFile datei

Xeres

Moderator

BeitragFr, Jan 29, 2010 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann keinen Fehler erkennen.
Hast du die Funktion mal isoliert ausgetestet? Wenn du den Eintrag nicht duplizierst oder zweimal an verschiedenen Stellen einträgst, sollte es so funktionieren.
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)

Midimaster

BeitragFr, Jan 29, 2010 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
prüfe mal, ob die neu dazukommenden daten überhaupt verschieden sind:



BlitzBasic: [AUSKLAPPEN]
char.character_list = New character_list
char\name = name_txtfield\caption$
char\rasse = rasse_txtfield\caption$
char\klasse = klasse_txtfield\caption$

DebugLog "Neu dazu: " + name_txtfield\caption$

char_counter = char_counter + 1

datei = WriteFile("data/char_list.txt")
WriteLine datei, char_counter

DebugLog "und nun mal alle: "

For char.character_list = Each character_list

DebugLog "In der Liste: " + char\name$

WriteLine datei, char\name$
WriteLine datei, char\rasse$
WriteLine datei, char\klasse$
Next

CloseFile datei



und noch ne Frage:

schaust Du dir die Datei anschließend mit einem Editor an, oder wieder im Programm selbst später?
 

Pousup

BeitragFr, Jan 29, 2010 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also. Das Debuglog sieht so aus:

Neu dazu: Char1
und nun mal alle:
In der Liste: Char1
Neu dazu: Char2
und nun mal alle:
In der Liste: Char1
In der Liste: Char1
In der Liste: Char2

Die Datei schau ich mir im Editor an (wo dann Char1 auch wirklich zweimal
vorhanden ist) und ebenfalls seh ich ja in der Listbox, wie viele
Einträge da sind (wo ebenfalls Char1 zweimal vorhanden ist)

Die Einträge werden im gesamten Programm nur einmal geschrieben.

Der Eisvogel

BeitragFr, Jan 29, 2010 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Interesant wäre noch wie genau due diese Ausgabe erzeugst und wie du neue Einträge GENAU erstellst.
Ich denke, das der Fehler in der Debuglog-Ausgabe liegt, oder beim einfügen der Type-Einträge, da deine Speicher-Methode korrekt ist.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Midimaster

BeitragFr, Jan 29, 2010 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Da sind plötzlich wirklich 3 Einträge in der Liste, obwohl du erst den zweiten mit NEW erzeugst.

Das Problem entsteht also nicht erst beim Speichern! Irgendwann muss noch eine Eintrag in die Liste gelangt sein.

Mach doch mal folgendes:

Zeigt mal den ganzen Funktionsaufruf und mach die Char LOCAL.

Und noch ne Frage:

Ist da irgenwo im Programm noch ein New character_list? Egal, was davorsteht... mir geht es um das NEW!!!
 

Pousup

BeitragFr, Jan 29, 2010 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Tatsächlich, Midimaster es kommt noch ein New vor, und zwar dort, wo die Einträge für die Listbox
aus der Datei in ein Type geladen werden! Wie ich den Fehler allerdings beheben kann, will mir gerade
nicht einleuchten...

Xeres

Moderator

BeitragFr, Jan 29, 2010 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code ist es immer schwer da weiter zu helfen.
Wenn du ohnehin alle Types aus der Datei lädst, kannst du vorher ja sicher gehen und die bestehenden Löschen:
BlitzBasic: [AUSKLAPPEN]
Delete Each character_list
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)

Midimaster

BeitragFr, Jan 29, 2010 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
du darfst neue Elemente nur 1x in diese Liste eintragen. Warum benötigst Du denn 2 Stellen, wo du NEW machst?

Normalerweise würden die Daten ja aus einer Datei eingelesen. Da ist NEW richtig. Später änderst du sie vielleicht, dann heißt es FOR/EACH/NEXT und dort nach dem richtigen suchen.

Beim Speichern z.b. wird diese Liste gar nicht erweitert, sondern höchstens aktualisiert und dann die Daten gespeichert.
 

Pousup

BeitragFr, Jan 29, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt - jetzt wo man weiß, wie's geht ist es ganz einfach Very Happy
Danke für die Hilfe - nach dem Speichern in der Datei hat ein simples
"Delete char" in der For-Each Schleife gereicht um das Problem zu lösen!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group