Unicode Preference (anstelle der Ascii/ UTF8-PB-Befehle)
Verfasst: 23.02.2007 21:28
Da die Preferencebefehle der PB-Lib nicht im Unicode-Modus
funktionieren, bzw. nur Ascii-Dateien erstellen und lesen können, hab ich
mir das ganze System nach Programmiert. Dabei sind zwei Versionen
entstanden. Beide haben Macros, welche die Include anstelle der
normalen Preferencebefehle von PB ersetzten können, aber nicht müssen.
Nachtrag: Ich hab grad in der Hilfe gelesen, das im
Unicodemodus UTF8-Dateien erstellt und gelesen werden (können)!
Die erste ist eine abgespeckte Version die im prinzip nichts weiter als wie
ein Wrapper fungiert zu den File-Befehlen, welche Preference-Dateien
lesen und erstellen kann. Es gibt hier keine Suchfunktion.
Edit: (25.02.07)
Fixed: ExaminePreferenceGroups() und ExaminePreferenceKeys() als Macro vergessen
Fixed: NextPreferenceKey() gab immer am ende der Datei 0 zurück, auch wenn noch 1 Key gefunden wurde
Fixed: NextPreferenceKey() hat die Dateizeiger nicht zurück gesetzt, wenn eine Gruppenzeile eingelesen wurde
Edit: (01.03.07)
Fixed: wenn CreatePreference()/ CreateFPreference() UTF8 oder UTF16 als Format übergeben wurde, wurde ein Fehler angezeigt
Edit: (23.08.07)
Fixed: Beim Einlesen/ Durchlaufen der Keys wurden auch Leerzeilen berücksichtigt
Die zweite Version hat den vollen Funktionsumfang, ist dafür wesentlich
langsamer und ich hab sie auch nicht sonderlich optimiert ^_^. Allerdings
sind die Preference-Befehle eh nicht gerade für Zeit-Kritische Programme
zu gebrauchen und so langsam ists nu auch nicht
. Ach ja, ich hab
versucht das Verhalten von PB nach zu ahmen ... aber sicher gibs
Situationen, wo sich die PB-Befehle anders verhalten. Einfach bescheid
sagen
... oder direkt die neue Version hier online stellen.
Und damit jeder mal konkrete Zahlen sieht, hier nen kleines
Konsolenprogramm, welches die jeweiligen Zeitmessungen ausspuckt.
(Auf langsamen Rechnern eventuell die Werte erst mindern
)
MFG PMV
funktionieren, bzw. nur Ascii-Dateien erstellen und lesen können, hab ich
mir das ganze System nach Programmiert. Dabei sind zwei Versionen
entstanden. Beide haben Macros, welche die Include anstelle der
normalen Preferencebefehle von PB ersetzten können, aber nicht müssen.
Nachtrag: Ich hab grad in der Hilfe gelesen, das im
Unicodemodus UTF8-Dateien erstellt und gelesen werden (können)!
Die erste ist eine abgespeckte Version die im prinzip nichts weiter als wie
ein Wrapper fungiert zu den File-Befehlen, welche Preference-Dateien
lesen und erstellen kann. Es gibt hier keine Suchfunktion.
Edit: (25.02.07)
Fixed: ExaminePreferenceGroups() und ExaminePreferenceKeys() als Macro vergessen
Fixed: NextPreferenceKey() gab immer am ende der Datei 0 zurück, auch wenn noch 1 Key gefunden wurde
Fixed: NextPreferenceKey() hat die Dateizeiger nicht zurück gesetzt, wenn eine Gruppenzeile eingelesen wurde
Edit: (01.03.07)
Fixed: wenn CreatePreference()/ CreateFPreference() UTF8 oder UTF16 als Format übergeben wurde, wurde ein Fehler angezeigt
Edit: (23.08.07)
Fixed: Beim Einlesen/ Durchlaufen der Keys wurden auch Leerzeilen berücksichtigt
Code: Alles auswählen
; PureBasic V4.02
; © 2007 by PMV
; FastUnicodePreference.pbi
; Datum: 23.08.2007
; !#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#
; !#!# !#!#
; !#!# Hinweiß: !#!#
; !#!# setze die Konstante #UseFUnicodePreferenceAsPB vor dem 'Includieren' !#!#
; !#!# der Datei auf #False, um die Befehle neben den PB-Befehlen zu nutzen !#!#
; !#!# !#!#
; !#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#
CompilerIf Defined(UseFUnicodePreferenceAsPB, #PB_Constant) = #False
#UseFUnicodePreferenceAsPB = #True
CompilerEndIf
Structure PMV_FPreference
Format.l
File.l
Start.l
GroupName.s
ExamineGroups.l
KeyName.s
KeyValue.s
ExamineKeys.l
EndStructure
Global PMV_FPreference.PMV_FPreference
Procedure PMV_CloseFPreferences()
With PMV_FPreference
If \File
CloseFile(\File)
\GroupName = ""
\KeyName = ""
\KeyValue = ""
\ExamineKeys = #False
\ExamineGroups = #False
\File = #False
EndIf
EndWith
EndProcedure
Procedure PMV_ReadFPreferences(Filename$)
With PMV_FPreference
If \File
PMV_CloseFPreferences()
EndIf
\File = ReadFile(#PB_Any, Filename$)
If \File
\Format = ReadStringFormat(\File)
If \Format = #PB_Ascii Or \Format = #PB_UTF8 Or \Format = #PB_Unicode
\Start = Loc(\File)
ProcedureReturn #True
EndIf
CloseFile(\File)
\File = #False
EndIf
ProcedureReturn #False
EndWith
EndProcedure
Procedure PMV_ExamineFPreferenceGroups()
If PMV_FPreference\File
If Loc(PMV_FPreference\File) <> PMV_FPreference\Start
FileSeek(PMV_FPreference\File, PMV_FPreference\Start)
EndIf
PMV_FPreference\ExamineGroups = #True
Else
PMV_FPreference\ExamineGroups = #False
EndIf
ProcedureReturn PMV_FPreference\ExamineGroups
EndProcedure
Procedure PMV_NextFPreferenceGroup()
Protected Line.s, Pos.l
With PMV_FPreference
If \ExamineGroups
While Not Eof(\File)
Line = Trim(ReadString(\File, \Format))
If Left(Line, 1) = "["
Pos = FindString(Line, "]", 1)
If Pos
\GroupName = Mid(Line, 2, Pos - 2)
Else
\GroupName = Right(Line, Len(Line) - 1)
EndIf
ProcedureReturn #True
EndIf
Wend
EndIf
\GroupName = ""
\ExamineGroups = #False
ProcedureReturn #False
EndWith
EndProcedure
Procedure PMV_ExamineFPreferenceKeys()
With PMV_FPreference
If \File
If Eof(\File)
FileSeek(\File, 0)
EndIf
\ExamineKeys = #True
Else
\ExamineKeys = #False
EndIf
ProcedureReturn \ExamineKeys
EndWith
EndProcedure
Procedure PMV_NextFPreferenceKey()
Protected Line.s, Pos.l, Loc.l = 0
With PMV_FPreference
If \ExamineKeys
While Not Eof(\File)
Loc = Loc(\File)
Line = Trim(ReadString(\File, \Format))
If Left(Line, 1) = "["
\ExamineKeys = #False
\KeyName = ""
\KeyValue = ""
FileSeek(\File, Loc)
Break
ElseIf Line And Left(Line, 1) <> ";"
Pos = FindString(Line, "=", 1)
If Not Pos
\KeyName = Line
Else
\KeyName = RTrim(Left(Line, Pos - 1))
\KeyValue = LTrim(Right(Line, Len(Line) - Pos))
EndIf
ProcedureReturn #True
EndIf
Wend
If Eof(\File) : \ExamineKeys = #False : EndIf
Else
\KeyName = ""
\KeyValue = ""
EndIf
ProcedureReturn \ExamineKeys
EndWith
EndProcedure
Procedure PMV_CreateFPreferences(Filename$, Format=0)
With PMV_FPreference
If \File
PMV_CloseFPreferences()
EndIf
If Format And (Format <> #PB_Ascii And Format <> #PB_UTF8 And Format <> #PB_Unicode)
ProcedureReturn #False
EndIf
\File = CreateFile(#PB_Any, Filename$)
If \File
If Format
\Format = Format
Else
CompilerIf #PB_Compiler_Unicode
\Format = #PB_Unicode
CompilerElse
\Format = #PB_Ascii
CompilerEndIf
EndIf
WriteStringFormat(\File, \Format)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndWith
EndProcedure
CompilerIf #UseFUnicodePreferenceAsPB
Macro OpenPreferences(Filename)
PMV_ReadFPreferences(Filename)
EndMacro
Macro CreatePreferences(Filename, Format=0)
PMV_CreateFPreferences(Filename, Format)
EndMacro
Macro NextPreferenceGroup()
PMV_NextFPreferenceGroup()
EndMacro
Macro NextPreferenceKey()
PMV_NextFPreferenceKey()
EndMacro
Macro ClosePreferences()
PMV_CloseFPreferences()
EndMacro
Macro PreferenceGroupName()
PMV_FPreference\GroupName
EndMacro
Macro PreferenceKeyName()
PMV_FPreference\KeyName
EndMacro
Macro PreferenceKeyValue()
PMV_FPreference\KeyValue
EndMacro
Macro PreferenceGroup(GroupName)
WriteStringN(PMV_FPreference\File, "[" + GroupName + "]", PMV_FPreference\Format)
EndMacro
Macro PreferenceComment(Comment)
WriteStringN(PMV_FPreference\File, "; " + Comment, PMV_FPreference\Format)
EndMacro
Macro ExaminePreferenceGroups()
PMV_ExamineFPreferenceGroups()
EndMacro
Macro ExaminePreferenceKeys()
PMV_ExamineFPreferenceKeys()
EndMacro
Macro WritePreferenceLong(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + Str(Value), PMV_FPreference\Format)
EndMacro
Macro WritePreferenceString(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + Value, PMV_FPreference\Format)
EndMacro
Macro WritePreferenceQuad(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrQ(Value), PMV_FPreference\Format)
EndMacro
Macro WritePreferenceDouble(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrD(Value), PMV_FPreference\Format)
EndMacro
Macro WritePreferenceFloat(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrF(Value), PMV_FPreference\Format)
EndMacro
CompilerElse
Macro PMV_FPreferenceGroupName()
PMV_FPreference\GroupName
EndMacro
Macro PMV_FPreferenceKeyName()
PMV_FPreference\KeyName
EndMacro
Macro PMV_FPreferenceKeyValue()
PMV_FPreference\KeyValue
EndMacro
Macro PMV_FPreferenceGroup(GroupName)
WriteStringN(PMV_FPreference\File, "[" + GroupName + "]", PMV_FPreference\Format)
EndMacro
Macro PMV_FPreferenceComment(Comment)
WriteStringN(PMV_FPreference\File, "; " + Comment, PMV_FPreference\Format)
EndMacro
Macro PMV_WriteFPreferenceLong(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + Str(Value), PMV_FPreference\Format)
EndMacro
Macro PMV_WriteFPreferenceString(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + Value, PMV_FPreference\Format)
EndMacro
Macro PMV_WriteFPreferenceQuad(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrQ(Value), PMV_FPreference\Format)
EndMacro
Macro PMV_WriteFPreferenceDouble(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrD(Value), PMV_FPreference\Format)
EndMacro
Macro PMV_WriteFPreferenceFloat(Keyword,Value)
WriteStringN(PMV_FPreference\File, Keyword + " = " + StrF(Value), PMV_FPreference\Format)
EndMacro
CompilerEndIf
langsamer und ich hab sie auch nicht sonderlich optimiert ^_^. Allerdings
sind die Preference-Befehle eh nicht gerade für Zeit-Kritische Programme
zu gebrauchen und so langsam ists nu auch nicht

versucht das Verhalten von PB nach zu ahmen ... aber sicher gibs
Situationen, wo sich die PB-Befehle anders verhalten. Einfach bescheid
sagen


Code: Alles auswählen
; PureBasic V4.02
; © 2007 by PMV
; UnicodePreference.pbi
; Datum: 23.08.2007
; !#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!
; !#!# !#!#
; !#!# Hinweis: !#!#
; !#!# setze die Konstante #UseUnicodePreferenceAsPB vor dem 'Includieren' !#!#
; !#!# der Datei auf #False, um die Befehle neben den PB-Befehlen zu nutzen !#!#
; !#!# !#!#
; !#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#
CompilerIf Defined(UseUnicodePreferenceAsPB, #PB_Constant) = #False
#UseUnicodePreferenceAsPB = #True
CompilerEndIf
Structure PMV_PreferenceLine
Typ.b ;0 = Group (mit *NextGroup);1 = Key (mit Value) ; 2 = Commend
Name.s
;StructureUnion ;weg lassen, da PB nicht damit klar kommt (Stand PB4.02)
Value.s
*NextGroup
;EndStructureUnion
EndStructure
Global NewList PMV_PreferenceLine.PMV_PreferenceLine()
Structure PMV_Preference
*KeyElement.PMV_PreferenceLine ; aktuelles KeyElement
*GroupElement.PMV_PreferenceLine ; aktuelles GroupElement
Format.l ; Dateiformat der Preference
Change.b ; 0 = keine Änderung ;1 = Änderung
Filename.s ; Filename der aktuellen Preferencedatei
NewGroup.s ; eine neue Gruppe soll erstellt werden
EndStructure
Global PMV_Preference.PMV_Preference
Procedure PMV_ClosePreferences()
Protected File.l
With PMV_PreferenceLine()
If PMV_Preference\Change
File = CreateFile(#PB_Any, PMV_Preference\Filename)
If File
WriteStringFormat(File, PMV_Preference\Format)
ForEach PMV_PreferenceLine()
Select \Typ
Case 0 ;Group
WriteStringN(File, "[" + \Name + "]", PMV_Preference\Format)
Case 1 ;Key
WriteStringN(File, \Name + " = " + \Value, PMV_Preference\Format)
Case 2 ;Comment
WriteStringN(File, "; " + \Name, PMV_Preference\Format)
EndSelect
Next
CloseFile(File)
EndIf
PMV_Preference\Change = #False
EndIf
ClearList(PMV_PreferenceLine())
PMV_Preference\Filename = ""
PMV_Preference\Format = 0
EndWith
EndProcedure
Procedure PMV_OpenPreferences(Filename$)
Protected Pos.l, Line.s, File.l, *LastGroup.PMV_PreferenceLine
With PMV_Preference
If \Change And \Filename
PMV_ClosePreferences()
EndIf
\Change = #False
\Filename = ""
\NewGroup = ""
\KeyElement = #False
\GroupElement = #False
ClearList(PMV_PreferenceLine())
File = OpenFile(#PB_Any, Filename$)
If File
\Format = ReadStringFormat(File)
If \Format = #PB_Ascii Or \Format = #PB_UTF8 Or \Format = #PB_Unicode
While Not Eof(File)
Line = Trim(ReadString(File, PMV_Preference\Format))
If Left(Line, 1) = "["
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 0
If *LastGroup
*LastGroup\NextGroup = @PMV_PreferenceLine()
EndIf
*LastGroup = @PMV_PreferenceLine()
Pos = FindString(Line, "]", 1)
If Pos
PMV_PreferenceLine()\Name = Mid(Line, 2, Pos - 2)
Else
PMV_PreferenceLine()\Name = Right(Line, Len(Line) - 1)
EndIf
ElseIf Left(Line, 1) = ";"
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 2
PMV_PreferenceLine()\Name = LTrim(Right(Line, Len(Line) - 1))
ElseIf Line
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 1
Pos = FindString(Line, "=", 1)
If Not Pos
PMV_PreferenceLine()\Name = Line
Else
PMV_PreferenceLine()\Name = RTrim(Left(Line, Pos - 1))
PMV_PreferenceLine()\Value = LTrim(Right(Line, Len(Line) - Pos))
EndIf
EndIf
Wend
CloseFile(File)
\Filename = Filename$
ProcedureReturn #True
EndIf
CloseFile(File)
EndIf
ProcedureReturn #False
EndWith
EndProcedure
Procedure PMV_ExaminePreferenceGroups()
PMV_Preference\KeyElement = #False
If CountList(PMV_PreferenceLine())
PMV_Preference\GroupElement = 1
ProcedureReturn #True
EndIf
PMV_Preference\GroupElement = #False
ProcedureReturn #False
EndProcedure
Procedure PMV_ExaminePreferenceKeys()
If CountList(PMV_PreferenceLine())
If PMV_Preference\GroupElement
PMV_Preference\KeyElement = 1
ProcedureReturn #True
EndIf
EndIf
PMV_Preference\KeyElement = #False
ProcedureReturn #False
EndProcedure
Procedure PMV_NextPreferenceGroup()
With PMV_Preference
If \GroupElement
If \GroupElement = 1
ResetList(PMV_PreferenceLine())
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 0 ; Group
\GroupElement = @PMV_PreferenceLine()
ProcedureReturn #True
EndIf
Wend
Else
If \GroupElement\NextGroup
\GroupElement = \GroupElement\NextGroup
ProcedureReturn #True
EndIf
EndIf
EndIf
\KeyElement = #False
\GroupElement = #False
ProcedureReturn #False
EndWith
EndProcedure
Procedure.s PMV_PreferenceGroupName()
If PMV_Preference\GroupElement > 1
ProcedureReturn PMV_Preference\GroupElement\Name
EndIf
ProcedureReturn ""
EndProcedure
Procedure PMV_NextPreferenceKey()
If PMV_Preference\KeyElement
If PMV_Preference\KeyElement = 1
ChangeCurrentElement(PMV_PreferenceLine(), PMV_Preference\GroupElement)
Else
ChangeCurrentElement(PMV_PreferenceLine(), PMV_Preference\KeyElement)
EndIf
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 1 ; Key
PMV_Preference\KeyElement = @PMV_PreferenceLine()
ProcedureReturn #True
ElseIf PMV_PreferenceLine()\Typ = 0 ; Group
Break
EndIf
Wend
EndIf
PMV_Preference\KeyElement = #False
ProcedureReturn #False
EndProcedure
Procedure.s PMV_PreferenceKeyName()
If PMV_Preference\KeyElement > 1
ProcedureReturn PMV_Preference\KeyElement\Name
EndIf
ProcedureReturn ""
EndProcedure
Procedure.s PMV_PreferenceKeyValue()
If PMV_Preference\KeyElement > 1
ProcedureReturn PMV_Preference\KeyElement\Value
EndIf
ProcedureReturn ""
EndProcedure
Macro PMV_WritePreference__(Type, Format, Str=)
Procedure PMV_WritePreference#Type(Keyword$, Value#Format)
If PMV_Preference\NewGroup
LastElement(PMV_PreferenceLine())
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 0 ; Group
PMV_PreferenceLine()\Name = PMV_Preference\NewGroup
PMV_Preference\NewGroup = ""
PMV_Preference\GroupElement = @PMV_PreferenceLine()
While PreviousElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 0
PMV_PreferenceLine()\NextGroup = PMV_Preference\GroupElement
Break
EndIf
Wend
EndIf
If PMV_Preference\GroupElement > 1
ChangeCurrentElement(PMV_PreferenceLine(), PMV_Preference\GroupElement)
Else
ResetList(PMV_PreferenceLine())
EndIf
PMV_Preference\Change = #True
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 1 ; Key
If PMV_PreferenceLine()\Name = Keyword$
PMV_PreferenceLine()\Value = Str#(Value)
ProcedureReturn
EndIf
ElseIf PMV_PreferenceLine()\Typ = 0 ; Group
PreviousElement(PMV_PreferenceLine())
Break
EndIf
Wend
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 1
PMV_PreferenceLine()\Name = Keyword$
PMV_PreferenceLine()\Value = Str#(Value)
EndProcedure
EndMacro
PMV_WritePreference__(String,.s)
PMV_WritePreference__(Long,.l,Str)
PMV_WritePreference__(Quad,.q,StrQ)
PMV_WritePreference__(Float,.f,StrF)
PMV_WritePreference__(double,.d,StrD)
Macro PMV_ReadPreference__(Type, Format, Val=)
Procedure#Format PMV_ReadPreference#Type#(Keyword$, DefaultValue#Format)
If PMV_Preference\GroupElement > 1
ChangeCurrentElement(PMV_PreferenceLine(), PMV_Preference\GroupElement)
Else
ResetList(PMV_PreferenceLine())
EndIf
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 1 ; Key
If PMV_PreferenceLine()\Name = Keyword$
ProcedureReturn Val#(PMV_PreferenceLine()\Value)
EndIf
ElseIf PMV_PreferenceLine()\Typ = 0 ; Group
Break
EndIf
Wend
ProcedureReturn DefaultValue#Format
EndProcedure
EndMacro
PMV_ReadPreference__(String,$)
PMV_ReadPreference__(Long,.l, Val)
PMV_ReadPreference__(Quad,.q,ValQ)
PMV_ReadPreference__(Float,.f,ValF)
PMV_ReadPreference__(double,.d,ValD)
Procedure PMV_PreferenceCommant(Comment$)
AddElement(PMV_PreferenceLine())
PMV_PreferenceLine()\Typ = 2 ; Comment
PMV_PreferenceLine()\Name = Comment$
EndProcedure
Procedure PMV_PreferenceGroup(GroupName$)
Protected *Group.PMV_PreferenceLine
ForEach PMV_PreferenceLine()
If PMV_PreferenceLine()\Typ = 0 ; Group
*Group = @PMV_PreferenceLine()
Break
EndIf
Next
If *Group
Repeat
If *Group\Name = GroupName$
PMV_Preference\GroupElement = *Group
ProcedureReturn #True
EndIf
*Group = *Group\NextGroup
Until Not *Group
EndIf
PMV_Preference\NewGroup = GroupName$
ProcedureReturn #False
EndProcedure
Procedure PMV_CreatePreferences(Filename$, Format=0)
Protected File.l
With PMV_Preference
If \Change And \Filename
PMV_ClosePreferences()
EndIf
\Change = #False
\Filename = ""
\NewGroup = ""
\KeyElement = #False
\GroupElement = #False
ClearList(PMV_PreferenceLine())
If Format And (Format <> #PB_Ascii And Format <> #PB_UTF8 And Format <> #PB_Unicode)
ProcedureReturn #False
EndIf
File = CreateFile(#PB_Any, Filename$)
If File
CloseFile(File)
\Filename = Filename$
If Format
\Format = Format
Else
CompilerIf #PB_Compiler_Unicode
\Format = #PB_Unicode
CompilerElse
\Format = #PB_Ascii
CompilerEndIf
EndIf
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndWith
EndProcedure
Procedure PMV_RemovePreferenceGroup(GroupName$)
Protected *Group.PMV_PreferenceLine, *LastGroup.PMV_PreferenceLine
ForEach PMV_PreferenceLine()
If PMV_PreferenceLine()\Typ = 0 ; Group
*Group = @PMV_PreferenceLine()
Break
EndIf
Next
If *Group
Repeat
If *Group\Name = GroupName$
ChangeCurrentElement(PMV_PreferenceLine(), *Group)
PMV_Preference\GroupElement = *Group
If *Group = PMV_Preference\GroupElement
PMV_Preference\GroupElement = *Group\NextGroup
PMV_Preference\KeyElement = #False
EndIf
*LastGroup\NextGroup = *Group\NextGroup
*Group = *Group\NextGroup
DeleteElement(PMV_PreferenceLine())
PMV_Preference\Change = #True
While NextElement(PMV_PreferenceLine())
If @PMV_PreferenceLine() = *Group
ProcedureReturn
EndIf
DeleteElement(PMV_PreferenceLine())
Wend
EndIf
*LastGroup = *Group
*Group = *Group\NextGroup
Until Not *Group
EndIf
EndProcedure
Procedure PMV_RemovePreferenceKey(Name$)
With PMV_Preference
If \GroupElement
If \GroupElement = 1
ResetList(PMV_PreferenceLine())
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 0 ; Group
Break
EndIf
Wend
Else
ChangeCurrentElement(PMV_PreferenceLine(), \GroupElement)
EndIf
While NextElement(PMV_PreferenceLine())
If PMV_PreferenceLine()\Typ = 1 ; Key
If PMV_PreferenceLine()\Name = Name$
If \KeyElement = @PMV_PreferenceLine()
\KeyElement = #False
EndIf
DeleteElement(PMV_PreferenceLine())
PMV_Preference\Change = #True
ProcedureReturn
ElseIf PMV_PreferenceLine()\Typ = 0 ; Group
ProcedureReturn
EndIf
EndIf
Wend
EndIf
EndWith
EndProcedure
CompilerIf #UseUnicodePreferenceAsPB
Macro ClosePreferences()
PMV_ClosePreferences()
EndMacro
Macro OpenPreferences(Filename)
PMV_OpenPreferences(Filename)
EndMacro
Macro ExaminePreferenceGroups()
PMV_ExaminePreferenceGroups()
EndMacro
Macro ExaminePreferenceKeys()
PMV_ExaminePreferenceKeys()
EndMacro
Macro NextPreferenceGroup()
PMV_NextPreferenceGroup()
EndMacro
Macro NextPreferenceKey()
PMV_NextPreferenceKey()
EndMacro
Macro PreferenceGroupName()
PMV_PreferenceGroupName()
EndMacro
Macro PreferenceKeyName()
PMV_PreferenceKeyName()
EndMacro
Macro PreferenceKeyValue()
PMV_PreferenceKeyValue()
EndMacro
Macro PreferenceCommant(Commant)
PMV_PreferenceCommant(Commant)
EndMacro
Macro PreferenceGroup(GroupName)
PMV_PreferenceGroup(GroupName)
EndMacro
Macro CreatePreferences(Filename,Format=0)
PMV_CreatePreferences(Filename,Format)
EndMacro
Macro RemovePreferenceGroup(GroupName)
PMV_RemovePreferenceGroup(GroupName)
EndMacro
Macro RemovePreferenceKey(Name)
PMV_RemovePreferenceKey(Name)
EndMacro
Macro WritePreferenceString(Keyword, Value)
PMV_WritePreferenceString(Keyword, Value)
EndMacro
Macro WritePreferenceLong(Keyword, Value)
PMV_WritePreferenceLong(Keyword, Value)
EndMacro
Macro WritePreferenceQuad(Keyword, Value)
PMV_WritePreferenceQuad(Keyword, Value)
EndMacro
Macro WritePreferenceFload(Keyword, Value)
PMV_WritePreferenceFload(Keyword, Value)
EndMacro
Macro WritePreferenceDouble(Keyword, Value)
PMV_WritePreferenceDouble(Keyword, Value)
EndMacro
Macro ReadPreferenceString(Keyword, DefaultValue)
PMV_ReadPreferenceString(Keyword, DefaultValue)
EndMacro
Macro ReadPreferenceLong(Keyword, DefaultValue)
PMV_ReadPreferenceLong(Keyword, DefaultValue)
EndMacro
Macro ReadPreferenceQuad(Keyword, DefaultValue)
PMV_ReadPreferenceQuad(Keyword, DefaultValue)
EndMacro
Macro ReadPreferenceFloat(Keyword, DefaultValue)
PMV_ReadPreferenceFloat(Keyword, DefaultValue)
EndMacro
Macro ReadPreferenceDouble(Keyword, DefaultValue)
PMV_ReadPreferenceDouble(Keyword, DefaultValue)
EndMacro
CompilerEndIf
Konsolenprogramm, welches die jeweiligen Zeitmessungen ausspuckt.
(Auf langsamen Rechnern eventuell die Werte erst mindern

Code: Alles auswählen
#GroupSize = 300
#KeySize = 1000
EnableExplicit
Define.s GroupName, KeyName$, Key
Define.l Time, Group, KeyValue, Result
OpenConsole()
PrintN(" Gruppen: " + Str(#GroupSize) + " Keys: " + Str(#KeySize))
PrintN("")
CompilerIf #PB_Compiler_Unicode
PrintN("Unicode-Execute")
PrintN("")
PrintN(" PB-Preference-Befehle (UTF-8):")
CompilerElse
PrintN("ASCII-Execute")
PrintN("")
PrintN(" PB-Preference-Befehle:")
CompilerEndIf
Print(" Preference erstellen ... ")
Time = ElapsedMilliseconds()
If CreatePreferences("Test.ini")
For Group = 0 To #GroupSize
PreferenceGroup(Str(Group))
For KeyValue = 0 To #KeySize
KeyName$ = Str(KeyValue) + " Times"
WritePreferenceLong(KeyName$, KeyValue)
Next
Next
ClosePreferences()
PrintN(Str(ElapsedMilliseconds() - Time))
Else
PrintN("Fehler")
EndIf
End
Print(" Preference oeffnen ... ")
Time = ElapsedMilliseconds()
If OpenPreferences("Test.ini")
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference auslesen ... ")
Time = ElapsedMilliseconds()
ExaminePreferenceGroups()
While NextPreferenceGroup()
GroupName.s = PreferenceGroupName()
;Debug "[" + GroupName + "]"
ExaminePreferenceKeys()
While NextPreferenceKey()
Key.s = PreferenceKeyName() + " = " + PreferenceKeyValue()
;Debug Key
Wend
Wend
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference schliessen ... ")
Time = ElapsedMilliseconds()
ClosePreferences()
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Else
PrintN("Fehler")
EndIf
Print(" Preference durchsuchen ... ")
If OpenPreferences("Test.ini")
Time = ElapsedMilliseconds()
For Group = -1 To #GroupSize + 1
If PreferenceGroup(Str(Group))
For KeyValue = 0 To #KeySize
KeyName$ = Str(KeyValue) + " Times"
Result = ReadPreferenceLong(KeyName$, -1)
Next
EndIf
Next
Time = ElapsedMilliseconds() - Time
ClosePreferences()
PrintN(Str(Time))
Else
PrintN("Fehler")
EndIf
IncludeFile "UnicodePreference.pbi"
PrintN("")
PrintN(" Unicode-Preference-Befehle:")
Print(" Preference erstellen ... ")
Time = ElapsedMilliseconds()
If CreatePreferences("Test.ini")
For Group = 0 To #GroupSize
PreferenceGroup(Str(Group))
For KeyValue = 0 To #KeySize
KeyName$ = Str(KeyValue) + " Times"
WritePreferenceLong(KeyName$, KeyValue)
Next
Next
ClosePreferences()
EndIf
PrintN(Str(ElapsedMilliseconds() - Time))
Print(" Preference oeffnen ... ")
Time = ElapsedMilliseconds()
If OpenPreferences("Test.ini")
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference auslesen ... ")
Time = ElapsedMilliseconds()
ExaminePreferenceGroups()
While NextPreferenceGroup()
GroupName.s = PreferenceGroupName()
;Debug "[" + GroupName + "]"
ExaminePreferenceKeys()
While NextPreferenceKey()
Key.s = PreferenceKeyName() + " = " + PreferenceKeyValue()
Wend
Wend
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference schliessen ... ")
Time = ElapsedMilliseconds()
ClosePreferences()
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Else
PrintN("Fehler")
EndIf
Print(" Preference durchsuchen ... ")
If OpenPreferences("Test.ini")
Time = ElapsedMilliseconds()
For Group = -1 To #GroupSize + 1
If PreferenceGroup(Str(Group))
For KeyValue = 0 To #KeySize
KeyName$ = Str(KeyValue); + " Times"
Result = ReadPreferenceLong(KeyName$, -1)
;Debug KeyName$ + " = " + Str(Result)
Next
EndIf
Next
Time = ElapsedMilliseconds() - Time
ClosePreferences()
PrintN(Str(Time))
Else
PrintN("Fehler")
EndIf
#UseFUnicodePreferenceAsPB = #False
IncludeFile "FastUnicodePreference.pbi"
PrintN("")
PrintN(" FastUnicode-Preference-Befehle:")
Print(" Preference erstellen ... ")
Time = ElapsedMilliseconds()
If PMV_CreateFPreferences("Test.ini")
For Group = 0 To #GroupSize
PMV_FPreferenceGroup(Str(Group))
For KeyValue = 0 To #KeySize
KeyName$ = Str(KeyValue) + " Times"
PMV_WriteFPreferenceLong(KeyName$, KeyValue)
Next
Next
PMV_CloseFPreferences()
PrintN(Str(ElapsedMilliseconds() - Time))
Else
PrintN("Fehler")
EndIf
Print(" Preference oeffnen ... ")
Time = ElapsedMilliseconds()
If Not PMV_ReadFPreferences("Test.ini")
PrintN(" Fehler")
Else
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference auslesen ... ")
Time = ElapsedMilliseconds()
PMV_ExamineFPreferenceGroups()
While PMV_NextFPreferenceGroup()
GroupName.s = PMV_FPreferenceGroupName()
;Debug "[" + GroupName + "]"
PMV_ExamineFPreferenceKeys()
While PMV_NextFPreferenceKey()
Key.s = PMV_FPreferenceKeyName() + " = " + PMV_FPreferenceKeyValue()
;Debug Key
Wend
Wend
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
Print(" Preference schliessen ... ")
Time = ElapsedMilliseconds()
PMV_CloseFPreferences()
Time = ElapsedMilliseconds() - Time
PrintN(Str(Time))
EndIf
PrintN("")
PrintN(" ... fertig")
Input()
CloseConsole()