Simples INI Include

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Thunder

Betreff: Simples INI Include

BeitragFr, Jun 04, 2010 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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]
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" ;Sektor hinzufügen
AddINIEntry "width","800" ;Eintrag in den letzen Sektor (in dem Fall "Graphics) erstellen
AddINIEntry "height","600"
AddINIEntry "fullscreen","no"
AddINISection "nix"
AddINISection "highscore"
AddINIEntry "isused","yes"
AddINISection "ThisINI"
AddINIEntry "isfinished","no"
SaveINI name ;INI in der Datei name speichern
ClearINI ;Die Daten, die noch im RAM sind, löschen
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
; kein Vergleich mit 'no', da auch 'No' und 'nO' und 'NO' zulässig ist
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 ;Wenn ich hier noch eine weitere INI laden würde, müsste ich
;ClearINI nicht schreiben, da LoadINI am Anfang ClearINI aufruft
End Function


Die Funktionsbibliothek:
BlitzBasic: [AUSKLAPPEN]
Type TINIEntry
Field name$,wert$,isparent%
End Type

Function CreateTINIEntry(name$,wert$,isparent%) ;Private
Local e.TINIEntry=New TINIEntry
e\name=name
e\wert=wert
e\isparent=isparent
End Function

Function CreateTINIEntryBefore(name$,wert$,isparent%,element.TINIEntry) ;Private
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$)
;Löscht Daten der INI nicht!
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
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group