Datei nach einer bestimmten Zeile auslesen
Übersicht

![]() |
M0rgensternBetreff: Datei nach einer bestimmten Zeile auslesen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich hab mal wieder ein kleines Problem mit den guten alten Streams. Das ganze ist folgendermaßen: Ich will die LevelDateien in eine ordentliche Struktur bringen. Also speichere ich Hauptdaten als INI Datei. Diese lese ich auch mit meinem INI Parser aus. Das Problem: Die Werte der einzelnen Tiles möchte ich mit writebyte speichern. Wenn ich aber den INI Parser nutze komme ich nicht automatisch an diesen Informationen an, sondern fange wieder vorne in der Datei an. Meine Frage wäre jetzt, wie ich es schaffe an eben diese stelle in der Datei zu kommen, oder ob es sinnvoller wäre pro Map zwei Dateien zu speichern. Ich hab hier mal den Problemcode: BlitzMax: [AUSKLAPPEN] Function LoadMap(pName:String) Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wozu überhaupt ein Ini-Parser? Mit einem Text-Editor Lesbar abspeichern kannst du's auch so, zumal du dein eigenes Format ja gut genug kennen solltest... Oder du fügst dem Parser halt Felder hinzu. In einzelne Dateien auf zu teilen macht nur dann Sinn, wenn man die Einzelteile anders verwenden kann. Normalerweise reicht eine Datei vollkommen aus. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
DIe Maps werden später ziemlich viele verschiedene Infos enthalten (Tiles, Waypoints etc).
Das wollte ich alles sortieren. Deswegen INIParser. Ich kenne mein Format ja. Das Problem ist nur, dass ich nicht weiß, wie ich an eine bestimmte Stelle in der Datei springen kann. Wie meinst du das mit den Feldern? Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Möglichkeit a: Du Schreibst alle Daten Lesbar hintereinander mit Überschriften d.h. einer einzeiligen Erklärung zum folgen Datenblock den du beim einlesen ignorierst.
Oder b; Du baust in den Ini-Parser eine Möglichkeit ein, zu einem Feld bestimmter größe zu springen und dieses ein zu lesen. In jedem Falle bietet SeekStream die Möglichkeit an eine bestimmte Stelle zu springen. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Komisch, ich dachte ich hätte hier einen Beitrag geschrieben:
(Möglichkeit C) 2 Dateien machen und ASCII-Daten von Binärdaten trennen. Das ist sehr sauber. (Möglichkeit D) Außerdem kann man auch in einem Binärformat ASCII-Daten speichern. Die müssen dann aber Header oder eine sonstige Beschreibung bekommen. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was meinst du denn mit ASCII und Binärdaten, wenn ich mal so doof fragen darf? | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich habe angenommen, dass die Daten zur Map Binärdaten sind (alle ASCII-Zeichen[0-255] werden verwendet und jedes Byte ist ein Datenbyte).
Ich weiß ASCII-Dateien ist kein guter Ausdruck dafür, aber ich meine damit eine Textdatei die Daten in formatierter Form enthält. (Wichtig: Nicht jedes Byte ist ein Datenbyte) hexadezimale Anzeige einer Binärdatei: Code: [AUSKLAPPEN] 04 0A 53 45 52 56 45 52 32 30 31 30
Dieselben Daten in einer INI-Datei (ASCII-Datei): INI-Datei: Code: [AUSKLAPPEN] SERVERVERSION=4
SERVERNAME=SERVER2010 mfg Thunder Edit: PS: Und eine doofe Frage ist das nicht, da es afaik keine offiziellen Bezeichnungen sind. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Thunder:
Genauso hatte ich das vor. Aber ich glaube, wenn ich mit SeekStream arbeite kann ichalles in einer Datei lassen, da ich den Aufbau ja kenne. Ich hab nur ein Problem bei der Sache festgestellt: Mit writeline kommt man immer automatisch eine Zeile weiter. Wenn man dann aber danach Writebyte benutzt, dann setzt er das ganze in die letzte geschriebene Zeile. Beispiel: Zitat: [MySection]
Width=100 Height=50 (kryptische Zeichen wegen writebyte, die die Testdatei total verbreitern-->) Das heißt, seekstream bringt da erstmal nichts und der INI parser wird wahrscheinlich sogar den ganzen rechten Teil noch mitnehmen. Gibts eine Möglichkeit das zu umgehen? Also, dass der auch mit writebyte in ne neue Zeile rutscht? Lg, m0rgenstern |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was du im Editor siehst, sind ja auch nur Bytes. Auch der Zeilenumbruch wird durch Steuerbytes realisiert. Laut WriteLine![]() ![]() Und nebenbei: Ich finde, es ist ziemlich unsauber, in einem Dateiformat reine Text-Daten und Binär-Daten zu mixen. Text-Daten benutzt man dann, wenn man dem Anwender ermöglichen will, diese Einstellungen mit einem normalen Texteditor zu bearbeiten. Aber du willst ja wohl nicht, dass dir einer in der Zeile Code: [AUSKLAPPEN] Height=50 den Wert ändert, weil das fatale Folgen haben könnte.
mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klar, da soll niemand dran rumschrauben.
Aber: Ich hatte vorher beim Speichern von Waypoints arge Probleme, da er immer durcheinander kam. Und ich habe mir gedacht, wenn ich die Mapdaten schön strukturiere, dann geht das alles viel besser. Alleinschon, da ja noch verschiedene Objekte und auch vielleicht Lichter hinzukommen. Wenn irgendwelche Anwender meinen sie müssten in wichtigen Dateien von Spielen rumbasteln und die dann nicht mehr gehen, find ich sind sies sowieso selbst schuld. Man kann ja in entsprechenden Ordnern entsprechende Warnmeldungen ablegen^^ Btw: Wie genau funktioniert das mit Seekfile? Ich hab jetzt eine Zeile Platz gelassen duch zwei Writelines file, "". Das heißt, wenn man in der Datei oben anfängt zu zählen, dann stehen die byteinfos in der 5. Zeile in der Datei. Wenn ich aber SeekFile(File, 5) schreibe, dann hauts ihn raus wenn er die map zeichnen will, weil er falsche infos ausgelesen hat. Ab wo muss man zählen? Lg, M0rgenstern |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
SeekFile![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Holzchopf.
Vielen Dank. Das hat jetzt geklappt. Die Lösung war einfach zu einfach um drauf zu kommen^^ Vielen Dank an euch alle. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group