Hallo,
ich habe jetzt Mal mein BlitzMax INI Modul und die Beispieldatei auf BlitzBasic portiert. Es sollte jetzt alles funktionieren.
Ich bezeichne mein INI Modul als simpel, weil kein Datei-Handle von Nöten ist, um eine INI-Datei zu verwalten. Das ist die Einschränkung: man kann immer nur eine INI-Datei auf einmal verwalten, weil man kein Dateihandle braucht. Doch normalerweise muss ein Programm nur eine INI-Datei verwalten.
Die Beispieldatei sieht so aus:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Include "inimodul.bb" Const TESTINI$="test.ini"
If FileType(TESTINI)<>1 Then CreateTestINI(TESTINI) Print "ini created. Please restart..." Else Print "Reading..." ReadTestINI(TESTINI) EndIf WaitKey End
Function CreateTestINI(name$) AddINISection "Graphics" AddINIEntry "width","800" AddINIEntry "height","600" AddINIEntry "fullscreen","no" AddINISection "nix" AddINISection "highscore" AddINIEntry "isused","yes" AddINISection "ThisINI" AddINIEntry "isfinished","no" SaveINI name ClearINI End Function
Function FinishTestINI() RenameINISection "highscore","HIGHSCORE" ModifyINIEntry "entries","10","highscore" ModifyINIEntry "width","1280","Graphics" ModifyINIEntry "height","800","gRAPHICS" ModifyINIEntry "isfinished","yes","tHISini" WriteINIEntry "frequenzy","75","Graphics" WriteINIEntry "entries","15","highscore" DeleteINISection "nix" End Function
Function ReadTestINI(name$) LoadINI name Print "Width: "+ReadINIEntry("width","graphics") Print "Height: "+ReadINIEntry("heIGht","GraPHIcs") Print "Frequenzy: "+ReadINIEntry("FREqUenzy","Graphics") Print "Fullscreen: "+ReadINIEntry("fullscreen","graphics") + "; Bool: "+GetBool(ReadINIEntry("fullscreen","graphics")) Print "--" Print "Highscore:" Print "Isused: "+ReadINIEntry("isused","highscore")+"; Bool: " + GetBool(ReadINIEntry("isused","highscore")) Print "Entries: "+ReadINIEntry("entries","HIGHSCORE") If getbool(ReadINIEntry("isfinished","ThisINI"))=0 Then Print "This INI isn't finished yet." FinishTestINI() SaveINI name Print "Now it's finished. Please restart once more..." Else Print "This ini is finished." EndIf ClearINI End Function
Die Funktionsbibliothek:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Type TINIEntry Field name$,wert$,isparent% End Type
Function CreateTINIEntry(name$,wert$,isparent%) Local e.TINIEntry=New TINIEntry e\name=name e\wert=wert e\isparent=isparent End Function
Function CreateTINIEntryBefore(name$,wert$,isparent%,element.TINIEntry) Local e.TINIEntry=New TINIEntry e\name=name e\wert=wert e\isparent=isparent Insert e Before element End Function
Function LoadINI%(file$) Local name$,wert$,parent$="main" If First TINIEntry<>Null Then Delete Each TINIEntry If FileType(file)<>1 And FileType(file+".ini")=1 Then file=file+".ini" ElseIf FileType(file)<>1 Then Return False EndIf Local datei=ReadFile(file) If datei=0 Then Return False While Not Eof(datei) name=Trim(ReadLine(datei)) If Instr(name,";") Then name=Trim(Left(name,Instr(name,";")-1)) If Left(name,1)="[" And Right(name,1)="]" Then name=Trim(Mid(name,2,Len(name)-2)) Print "new Parent: '"+name+"'" CreateTINIEntry(name,"",1) ElseIf name="" Then Else wert=Mid(name,Instr(name,"=")+1,-1) name=Left(name,Instr(name,"=")-1) CreateTINIEntry(name,wert,0) EndIf Wend Return True End Function
Function GetBool%(w$) w=Trim(Lower(w)) Return (w<>"yes" And w<>"no")*-1+(w="yes") End Function
Function ReadINIEntry$(name$,parent$="main") Local cparent$="main",z.TINIEntry For z=Each TINIEntry If z\isparent Then cparent=z\name ElseIf Lower(z\name)=Lower(name) And Lower(cparent)=Lower(parent) Then Return z\wert EndIf Next End Function
Function DeleteINIEntry%(name$,parent$="main") Local cparent$="main",z.TINIEntry For z=Each TINIEntry If z\isparent Then cparent=z\name ElseIf Lower(z\name)=Lower(name) And Lower(cparent)=Lower(parent) Then Delete z Return True EndIf Next Return False End Function
Function ModifyINIEntry%(name$,wert$,parent$="main") Local cparent$="main",z.TINIEntry For z=Each TINIEntry If z\isparent Then If cparent=parent Then Return False cparent=z\name ElseIf Lower(z\name)=Lower(name) And Lower(cparent)=Lower(parent) Then z\wert=wert Return True EndIf Next Return False End Function
Function WriteINIEntry(name$,wert$,parent$="main") Local cparent$="main",z.TINIEntry For z=Each TINIEntry If z\isparent Then If Lower(cparent)=Lower(parent) Then CreateTINIEntryBefore(name,wert,0,z) Return EndIf cparent=z\name ElseIf Lower(z\name)=Lower(name) And Lower(cparent)=Lower(parent) Then z\wert=wert Return EndIf Next CreateTINIEntry(name,wert,0) End Function
Function AddINIEntry(name$,wert$) CreateTINIEntry(name,wert,0) End Function
Function SaveINI%(file$) Local datei=WriteFile(file),z.TINIEntry If datei=0 Then Return 0 For z=Each TINIEntry If z\isparent Then WriteLine datei,"["+z\name+"]" Else WriteLine datei,z\name+"="+z\wert EndIf Next CloseFile datei Return 1 End Function
Function ClearINI() Delete Each TINIEntry End Function
Function AddINISection%(name$) Local z.TINIEntry For z=Each TINIEntry If z\isparent And Lower(z\name)=Lower(name) Then Return False Next CreateTINIEntry(name,"",1) Return True End Function
Function RenameINISection%(name$,newname$) Local z.TINIEntry For z=Each TINIEntry If z\isparent And Lower(z\name)=Lower(name) Then z\name=newname:Return True Next Return False End Function
Function WriteINISection(name$,newname$) Local z.TINIEntry For z=Each TINIEntry If z\isparent And Lower(z\name)=Lower(name) Then z\name=newname:Return Next AddINISection(name) End Function
Function DeleteINISection%(name$) Local begin%=0,z.TINIEntry For z=Each TINIEntry If begin=1 And z\isparent Then Return True If Lower(z\name)=Lower(name) And z\isparent And begin=0 Then begin=1 If begin=1 Then Delete z Next Return False End Function
Edit: Neuer Downloadlink https://www.blitzforum.de/upload/file.php?id=13126
Das Modul ist relizenziert unter MIT Lizenz, da ich von GPL nicht mehr viel halte.
Es hat sich sonst allerdings nichts geändert.
Ich hoffe, ihr könnt es gebrauchen.
mfg Thunder
|