*.ini Konfigurationsdateien parsen und schreiben
Übersicht

OJayBetreff: *.ini Konfigurationsdateien parsen und schreiben |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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! ![]() 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 ![]() 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 ![]() 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 ![]() 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 ![]() |
||
crazy789 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
crazy789 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
srry hab den anfang net gelesen und den code ausm archiv net kopiert!
SORRY ![]() [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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
die ini datei muss in dem pfad liegen, wo dein programm liegt, das ist dir bewusst, oder? | ||
![]() |
eXceptION |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: INI = ReadFile(settings.ini)
probier: INI = ReadFile("settings.ini") |
||
Norweger...
Spreche aber verdammt gut 8086 |
crazy789 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! ![]() |
||
Ich will Blitz3D haben!!!
Ich will genügend Geld für Blitz3D haben!!! Ich will Blitz3D umsonst haben!!! |
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
huh? was gibts da zu ändern? bei mir stehen überall anführungszeichen! o_O | ||
crazy789 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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!!! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group