*.ini Konfigurationsdateien parsen und schreiben

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

 

OJay

Betreff: *.ini Konfigurationsdateien parsen und schreiben

BeitragSo, Mai 23, 2004 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
jeder kennt sicher diese tollen ini-dateien, in denen professionelle programme ihre einstellungen speichern, und sie beim nächsten start wieder laden, oder? man kann diese dateien mit einem text-editor öffnen und so außerhalb des programmes einstellungen verändern, wenn z.b. mal etwas nicht funktionieren sollte.
währe es nicht toll sowas auch in einem blitz-programm zu nutzen? nur: wie kann ich werte aus einer solchen datei einlesen?

mit folgendem tutorial und der funktions-bibliothek aus dem code-archiv sollte dies kein problem mehr darstellen Smile
ladet euch den code aus dem archiv herunter, fügt ihn in eine eigene *.bb quelltextdatei ein und bindet diese in euer projekt mit dem befehl "Include "ini.bb"" ein.


und dann kanns auch schon losgehen

zunächst einmal haben ini dateien, grob zusammengefasst folgende restriktionen:
- gruppen, welche in eckigen klammern stehen
- vor jeder gruppe eine leerzeile
- daten werden in der art gespeichert: variable = wert
- mit dem "#"-zeichen kann man kommentare einfügen

das ganz sähe dann z.b. so aus:

Code: [AUSKLAPPEN]
# general application settings
[general]
GraphicsWidth=512
GraphicsHeight=384
GraphicsDepth=32
GraphicsMode=2



man sieht hier also sehr schön, welche variable welchen wert hat, und man weiß dadurch, was man verändern muss, um bestimmte dinge in dem programm umzustellen.
aber wozu diese gruppen? ganz einfach: man kann gleiche variablen-namen in unterschiedlichen gruppen verwenden!
wenn man z.b. 2 objekte in seiner datei speichern möchte, und beide objekte haben z.b. eine position x und eine position y, dann könnten beide objekte unabhängig voneinander gespeichert werden...
Code: [AUSKLAPPEN]
[objekt1]
x=123
y=456

[objekt2]
x=453
y=682


ihr ahnt es schon: damit könnte man sogar spielstände speichern! Wink


dann wollen wir diese datei doch mal parsen!

als ersten schritt müssen wir die datei öffnen und den dateizeiger in einer variable speichern. diese wird dann später verwendet, um in der datei nach gruppen und werten zu suchen:
Code: [AUSKLAPPEN]
INI = ReadFile("game.ini")


nun zum einlesen der variablen und zuordnen zu unserem programm.
in unserem obigen beispiel haben wir die gruppe "[general]", in der wir grundsätzliche variablen unseres programms gespeichert haben, wie z.b. die auflösung und die farbtiefe mit der unser programm gestartet werden soll.
also wechseln wir zunächst mit unserem dateizeiger auf diese gruppe:
Code: [AUSKLAPPEN]
IniGroup(INI, "general")

und nun können wir auf einzelne variablen zugreifen, und uns derren werte liefern lassen:
Code: [AUSKLAPPEN]
Xaufloesung = ReadIniField(INI,"GraphicsWidth", 640)

der erste parameter ist wieder unser datei-zeiger, der zweite die variable, wie sie in der ini-datei steht, und der letzte stellt einen default-parameter dar, welcher zurückgegeben wird, falls in der datei keine variable mit dem namen "GraphicsWidth" gefunden wird. kann aber auch weggelassen werden...

das wars auch schon! wir könnten jetzt noch beliebig viele variablen-werte aus der datei holen, auch aus anderen gruppen. um eine gruppe zu wechseln ruft man einfach wieder IniGroup() auf, mit dem entsprechenden gruppennamen...total simpel.

und bitte bitte vergesst niemals, die datei wieder ordnungsgemäß zu schließen!
Code: [AUSKLAPPEN]
CloseFile INI



nun haben wir also die variable aus der ini datei ganz schnell und simpel in unser programm geladen. bevor wir nun zum speichern der datei kommen, noch ein komplettes beispiel, in dem wir die grafik-auflösung aus unserer datei holen, und mit diesen variablen unser spiel initialisieren:
die game.ini:
Code: [AUSKLAPPEN]
# general application settings
[general]
GraphicsWidth=512
GraphicsHeight=384
GraphicsDepth=32
GraphicsMode=2


der bb-quellcode:
Code: [AUSKLAPPEN]
INI = ReadFile(game\IniFile$)
IniGroup(INI, "general")
Width  = ReadIniField(INI,"GraphicsWidth", 640)
Height = ReadIniField(INI,"GraphicsHeight", 480)
Depth  = ReadIniField(INI,"GraphicsDepth", 16)
Mode   = ReadIniField(INI,"GraphicsMode", 2)
CloseFile INI

Graphics Width, Height, Depth, Mode
Waitkey()
End




daten in die ini schreiben

um die daten in unsere datei zu schreiben, müssen wir ebenfalls zunächst einen dateizeiger auf unsere datei holen. diesmal allerdings nicht mit Readfile(), denn wir wollen ja schreiben Wink
Code: [AUSKLAPPEN]
INI = WriteFile("game.ini")


nun können wir nacheinander unsere daten schreiben...
beginnen wir doch mit einem kommentar:
Code: [AUSKLAPPEN]
WriteIniComment(INI," general application settings")

der erste parameter ist unser dateizeiger, der zweite unser kommentar-text. hier gibt es nur eins zu beachten: den text OHNE dem "#"-zeichen angeben!

als nächstes folgt unsere gruppe:
Code: [AUSKLAPPEN]
WriteIniGroup(INI,"general")

auch hier wieder zunächst der dateizeiger, und dann unser gruppenname. hier gilt: gruppenname OHNE eckige klammern angeben! das übernimmt die funktion für uns Wink

und zum schluss wollen wir natürlich auch daten speichern:
Code: [AUSKLAPPEN]
WriteIniField(INI,"GraphicsWidth",640)

hier wie immer unser datei-zeiger zuerst, dann folgt der name, der variable und zum schluss folgt der wert, den diese zugewiesen bekommen soll.

man könnte nun beliebig viele variablen in beliebig vielen gruppen speichern. auch könnte man vor jeder variable oder gruppe einen kommentar zu derren funktion angeben. alles ist möglich Smile

am schluss selbstredent die datei wieder schließen:
Code: [AUSKLAPPEN]
CloseFile INI


ein komplett-beispiel erspar ich mir an dieser stelle, da das speichern nun wirklich sehr simpel gehalten ist...


ich hoffe ich hab mich verständlich ausgedrückt und ihr habt wieder was gelernt. bis zum nächsten mal.

euer OJay



Delfin Smile
 

crazy789

BeitragMo, Nov 08, 2004 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß net obs an der demo liegt, aber ich bekomme immer die fehlermeldung:
Zitat:
Type "ini" not found.
Ich will Blitz3D haben!!!
Ich will genügend Geld für Blitz3D haben!!!
Ich will Blitz3D umsonst haben!!!
 

OJay

BeitragMo, Nov 08, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
bist du sicher, das du den richtigen code aus dem archiv kopiert hast? in dem kommt überhaupt nicht ein einziges Type vor!

das was dreamora da gepostet hat ist das falsche! das in meinem allerersten post ist das richtige. Wink
 

crazy789

BeitragMo, Nov 08, 2004 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
srry hab den anfang net gelesen und den code ausm archiv net kopiert!

SORRY Embarassed


[edit]der fehler kommt immer noch
ich habe das hier in mein projekt eingefügt:
Zitat:
Include "gamedata\ini.bb"
INI = ReadFile(settings.ini)
IniGroup(INI, "grafik")
Width = ReadIniField(INI,"GraphicsWidth", 640)
Height = ReadIniField(INI,"GraphicsHeight", 480)
Depth = ReadIniField(INI,"GraphicsDepth", 16)
Mode = ReadIniField(INI,"GraphicsMode", 2)
CloseFile INI

is da irgendein fehler drin[/edit]
Ich will Blitz3D haben!!!
Ich will genügend Geld für Blitz3D haben!!!
Ich will Blitz3D umsonst haben!!!
 

OJay

BeitragMo, Nov 08, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
die ini datei muss in dem pfad liegen, wo dein programm liegt, das ist dir bewusst, oder?

eXceptION

BeitragMo, Nov 08, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
INI = ReadFile(settings.ini)


probier:
INI = ReadFile("settings.ini")
Norweger...

Spreche aber verdammt gut 8086
 

crazy789

BeitragMo, Nov 08, 2004 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
eXceptION hat Folgendes geschrieben:
Zitat:
INI = ReadFile(settings.ini)


probier:
INI = ReadFile("settings.ini")



danke!!! genau das wars!

funzt jetzt

ojay du könntest das ja gleich in deinem tut ändern! Very Happy
Ich will Blitz3D haben!!!
Ich will genügend Geld für Blitz3D haben!!!
Ich will Blitz3D umsonst haben!!!
 

OJay

BeitragMo, Nov 08, 2004 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
huh? was gibts da zu ändern? bei mir stehen überall anführungszeichen! o_O
 

crazy789

BeitragDi, Nov 09, 2004 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
oops srry dachte ich hätte das rauskopiert
Ich will Blitz3D haben!!!
Ich will genügend Geld für Blitz3D haben!!!
Ich will Blitz3D umsonst haben!!!

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group