SpecialINILib
Beschreibung:
Direkt von Vornherein: Das ist keine "normale" 0815-INI Lib! Häufig hat man diverse Einstellungen, die das eigene Programm in Funktion und Aussehen beeinflussen (=> Farben, zahlreiche "Trigger" - also Boolean-Variablen, Zahlenwerte, etc). Natürlich gibt es tausend (bessere) Wege diese zu speichern und zu laden (serialisieren, my.settings,...) als auf eine INI-Datei zurückzugreifen - manchmal tut man das aber doch, nur um sich an die "alten Zeiten" zu erinnern xD Und mal ehrlich: INI-Dateien sind schon praktisch um dem fortgeschrittenen Nutzer mehr Freiheiten zu geben.
Wie auch immer, wer sich für das INI-System entscheidet hat gleich viele Probleme - Das einlesen birgt so einige Hürden: statt einer Zahl wird "haxx0r" einem Schlüssel zugeordnet, das Programm muss auf diese Ausnahme reagieren. Bei mehreren Einstellungen verliert der Programmierer schnell die Lust, da er jedes Paar einzeln behandeln muss... genau da setzt meine Lib an!
Wie ich schon irgendwo geschrieben habe: Jede Instanz, ganz gleich welchen Types, kann mit der Lib verarbeitet werden. Einzige Voraussetzung: Sie enthält Properties (=> siehe unterstützte Datentypen). Die Lib "klinkt" sich per Extension an Object ein und ist somit Teil jedes Datentyps in .NET
Benutzung:
Der Nachteil meiner Lib ist, dass man für seine Einstellungen zwangsläufig eine Klasse (mit entsprechenden Properties) erstellen muss. Das ist aber gleichzeitig der große Vorteil: Man hat während der Entwicklungszeit die Unterstütztung von IntelliSense und muss sich nicht mit Konstrukten wie "cint(INI_Read("Sektion","IeinSchlüssel"))" rummschlagen. Ebenfalls braucht man sich nicht selbst um die TypUnwandlungen kümmern - die Varibalen in der Klasse haben ja ihren fest zugeordneten Typ!
Meine Lib übernimmt das Speichern und Laden der Einstellungen in und aus einer INI-Datei - und das vollautomatisiert:
Zu Beginn steht:
Als erstes benötigt man eine Klasse welche die Einstellungen "kapselt"
Spoiler anzeigen
Speichern in eine INI-Datei
Diese Einstellungen können automatisiert in eine Sektion gespeichert werden (im tmpINI_Datei String befindet sich der Inhalt der INI-Sektion. Wie dieser in eine Datei geschrieben wird bzw ausgelesen wird soll Problem des Programmieres sein^^)
Spoiler anzeigen
Laden aus einer INI-Datei
Mit diesem "Einzeiler" kann man die INI-Datei - unter Angabe einer Sektion - einlesen
Für den Fall, dass die EinstellungenKlasse Properties enthält, die nicht in die INI-Datei gelangen sollen ist auch vorgesorgt - für den umgekehrten Fall, dass nur einige wenige gespeichert und geladen werden sollen ebenfalls:
Mit den Attributen <INIProperty()> und <NoINIProperty()> kann man genau festlegen welche Properties in die INI-File geschrieben werden dürfen. Eine Überladung von <INIProperty()> ermöglicht es darüber hinaus einen Hinweis (per Kommentar) in die INI-Datei schreiben zu lassen. (Tipp: man kann eine Klasse per Attribut markieren. Tipp2: Die Markierungen sind nicht erforderlich, jede Klasse die gültige Variablen enthält kann ihre Einstellungen in das INI-Format bringen und umgekehrt)
Wie man sieht, werden nur "markierte" Properties gespeichert. Un-Markierte bzw als NoINIProperty markierte werden nicht gespeichert. Diesen Mechanismus kann man beeinflussen - .ExportINISettings hat mehrere Überladungen. Schaltet man AllPossibleProperties auf true, so werden alle (möglichen) Properties gespeichert, egal ob sie markiert sind oder nicht. Nur NoINIProperty-Markierte entkommen dem.
Unterstütze Datentypen:
Boolean, String, Color, Rectangle, Point, Date
Zahlenwerte: Integer, Single, Decimal, Double, Byte, Long
Hinweis:
INI-Dateien sind natürlich sehr Fehleranfällig (bsp: "Haxx0r" statt Zahlenwert). Diese "Lesefehler" werden einfach übergangen, d.h. der Wert der betreffenden Variable bleibt unverändert. Auf Userwunsch (SpecialINILib.ThrowReadErrors = True) wird in solchen Fällen eine Exception geworfen. Aus diesem Grund ist davon abzuraten INI-Dateien als "Dateiformat" zu missbrauchen denn bei Programmeinstellungen (ob AntiAliasing verwendet wird oder nicht, etc) ist die Tragweite solcher fehlinterpretationen eher gering.
Verwendete Programmiersprache:
Visual Basic .NET (IDE: VB 2008 Express)
Systemanforderungen:
.NET Framework 3.5
Lizenz/Weitergabe:
Freeware, Namensnennung wäre nett^^
Beschreibung:
Direkt von Vornherein: Das ist keine "normale" 0815-INI Lib! Häufig hat man diverse Einstellungen, die das eigene Programm in Funktion und Aussehen beeinflussen (=> Farben, zahlreiche "Trigger" - also Boolean-Variablen, Zahlenwerte, etc). Natürlich gibt es tausend (bessere) Wege diese zu speichern und zu laden (serialisieren, my.settings,...) als auf eine INI-Datei zurückzugreifen - manchmal tut man das aber doch, nur um sich an die "alten Zeiten" zu erinnern xD Und mal ehrlich: INI-Dateien sind schon praktisch um dem fortgeschrittenen Nutzer mehr Freiheiten zu geben.
Wie auch immer, wer sich für das INI-System entscheidet hat gleich viele Probleme - Das einlesen birgt so einige Hürden: statt einer Zahl wird "haxx0r" einem Schlüssel zugeordnet, das Programm muss auf diese Ausnahme reagieren. Bei mehreren Einstellungen verliert der Programmierer schnell die Lust, da er jedes Paar einzeln behandeln muss... genau da setzt meine Lib an!
Wie ich schon irgendwo geschrieben habe: Jede Instanz, ganz gleich welchen Types, kann mit der Lib verarbeitet werden. Einzige Voraussetzung: Sie enthält Properties (=> siehe unterstützte Datentypen). Die Lib "klinkt" sich per Extension an Object ein und ist somit Teil jedes Datentyps in .NET
Benutzung:
Der Nachteil meiner Lib ist, dass man für seine Einstellungen zwangsläufig eine Klasse (mit entsprechenden Properties) erstellen muss. Das ist aber gleichzeitig der große Vorteil: Man hat während der Entwicklungszeit die Unterstütztung von IntelliSense und muss sich nicht mit Konstrukten wie "cint(INI_Read("Sektion","IeinSchlüssel"))" rummschlagen. Ebenfalls braucht man sich nicht selbst um die TypUnwandlungen kümmern - die Varibalen in der Klasse haben ja ihren fest zugeordneten Typ!
Meine Lib übernimmt das Speichern und Laden der Einstellungen in und aus einer INI-Datei - und das vollautomatisiert:
Zu Beginn steht:
Als erstes benötigt man eine Klasse welche die Einstellungen "kapselt"
VB.NET-Quellcode
- Public Class MeineTesteinstellungen
- Dim _bool As Boolean = False
- Dim _str As String = "Hier steht etwas..."
- Dim _Color As Color = Color.Black
- Dim _zahl As Integer = 42
- Public Property EinBoolean() As Boolean
- Get
- Return _bool
- End Get
- Set(ByVal value As Boolean)
- _bool = value
- End Set
- End Property
- Public Property EinText() As String
- Get
- Return _str
- End Get
- Set(ByVal value As String)
- _str = value
- End Set
- End Property
- <NoINIProperty()> Public Property EineZahl() As Integer
- Get
- Return _zahl
- End Get
- Set(ByVal value As Integer)
- _zahl = value
- End Set
- End Property
- Public Property EineFarbe() As Color
- Get
- Return _Color
- End Get
- Set(ByVal value As Color)
- _Color = value
- End Set
- End Property
- End Class
Speichern in eine INI-Datei
Diese Einstellungen können automatisiert in eine Sektion gespeichert werden (im tmpINI_Datei String befindet sich der Inhalt der INI-Sektion. Wie dieser in eine Datei geschrieben wird bzw ausgelesen wird soll Problem des Programmieres sein^^)
VB.NET-Quellcode
- Dim Einstellungen As New MeineTesteinstellungen
- '..Einstellungen verändern sich...
- With Einstellungen
- .EinBoolean = True
- .EineFarbe = Color.Red
- .EineZahl = 13
- .EinText = "Mal schauen ob es klappt.."
- End With
- Dim tmpINI_Datei As String = ""'<= Das ist unsere "INI-Datei". Der String muss natürlich in eine echte Datei geschrieben/gelesen werden!
- tmpINI_Datei = Einstellungen.ExportINISettings("TestSektion", True) '=> ALLE (möglichen) Properties werden in die INI geschrieben
- 'tmpINI_Datei = Einstellungen.ExportINISettings("TestSektion", False) ' => nur per Attribut "markierte" Properties werden (wenn möglich) in die INI geschreiben
Laden aus einer INI-Datei
Mit diesem "Einzeiler" kann man die INI-Datei - unter Angabe einer Sektion - einlesen
Für den Fall, dass die EinstellungenKlasse Properties enthält, die nicht in die INI-Datei gelangen sollen ist auch vorgesorgt - für den umgekehrten Fall, dass nur einige wenige gespeichert und geladen werden sollen ebenfalls:
Mit den Attributen <INIProperty()> und <NoINIProperty()> kann man genau festlegen welche Properties in die INI-File geschrieben werden dürfen. Eine Überladung von <INIProperty()> ermöglicht es darüber hinaus einen Hinweis (per Kommentar) in die INI-Datei schreiben zu lassen. (Tipp: man kann eine Klasse per Attribut markieren. Tipp2: Die Markierungen sind nicht erforderlich, jede Klasse die gültige Variablen enthält kann ihre Einstellungen in das INI-Format bringen und umgekehrt)
Wie man sieht, werden nur "markierte" Properties gespeichert. Un-Markierte bzw als NoINIProperty markierte werden nicht gespeichert. Diesen Mechanismus kann man beeinflussen - .ExportINISettings hat mehrere Überladungen. Schaltet man AllPossibleProperties auf true, so werden alle (möglichen) Properties gespeichert, egal ob sie markiert sind oder nicht. Nur NoINIProperty-Markierte entkommen dem.
Unterstütze Datentypen:
Boolean, String, Color, Rectangle, Point, Date
Zahlenwerte: Integer, Single, Decimal, Double, Byte, Long
Hinweis:
INI-Dateien sind natürlich sehr Fehleranfällig (bsp: "Haxx0r" statt Zahlenwert). Diese "Lesefehler" werden einfach übergangen, d.h. der Wert der betreffenden Variable bleibt unverändert. Auf Userwunsch (SpecialINILib.ThrowReadErrors = True) wird in solchen Fällen eine Exception geworfen. Aus diesem Grund ist davon abzuraten INI-Dateien als "Dateiformat" zu missbrauchen denn bei Programmeinstellungen (ob AntiAliasing verwendet wird oder nicht, etc) ist die Tragweite solcher fehlinterpretationen eher gering.
Verwendete Programmiersprache:
Visual Basic .NET (IDE: VB 2008 Express)
Systemanforderungen:
.NET Framework 3.5
Lizenz/Weitergabe:
Freeware, Namensnennung wäre nett^^
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()