Hi This is an update of my ini class, New changes include:
SectionExists
Returns true or false if selection is found.
ReadBool
'Returns a bool value works with yes and on
ReadSections
Returns a list of selection names as a list object.
ReadSection
Returns a selections key names to a list object.
Class code
Example ini file.Code:'INI Call for VB.NET 'Version 1.1 Imports System.IO Imports System.Text Public Class cIniFile Private Enum KeyData KeyName = 0 KeyValue = 1 End Enum Private Const SplitChar As String = "€" Private Const AssignChar As String = "=" Private Const SelectionStart As String = "[" Private Const SelectionEnd As String = "]" Private mFilename As String Private IniData As List(Of String) Public Sub ReadSection(ByVal Selection As String, ByVal Strings As List(Of String)) If (Not IniData Is Nothing) Then 'Return a list of key names from a selection. For Each sLine In IniData 'Check if selections match. If IsMatch(GetSelection(sLine), Selection) Then 'Get key name Dim sPos As Integer = sLine.IndexOf(SplitChar) sLine = sLine.Substring(sPos + 1) 'Check for selection. If Not IsSelection(sLine) Then 'Add keyname to list Call Strings.Add(GetKeyData(sLine, KeyData.KeyName)) End If End If Next End If End Sub Public Sub ReadSections(ByVal Strings As List(Of String)) Dim selName As String If (Not IniData Is Nothing) Then For Each sLine In IniData selName = GetSelection(sLine) 'Check if selection is already found. If Not Strings.Contains(selName) Then 'Selection not found in list add it. Call Strings.Add(selName) End If Next End If End Sub Property Filename As String 'Get filename. Get Filename = mFilename End Get 'Set filename. Set(ByVal value As String) mFilename = value End Set End Property Public Function ReadBool(ByVal Selection As String, ByVal Key As String, Optional ByVal iDefault As Boolean = False) As Boolean Dim src As String = ReadString(Selection, Key, iDefault).ToLower() If (src = "yes") Or (src = "on") Then ReadBool = True Else ReadBool = CBool(src) End If End Function Public Function ReadString(ByVal Selection As String, ByVal Key As String, Optional ByVal iDefault As String = "") As String 'Returns a keys data. Dim Ret As String = vbNullChar If (Not IniData Is Nothing) Then 'Loop though the lines in the list collection. For Each sLine In IniData Dim sPos As Integer = sLine.IndexOf(SplitChar) 'Check for splitchar chr 128 position. If (sPos > 0) Then 'Check for selection match. If IsMatch(sLine.Substring(0, sPos), Selection) Then 'Get line. Dim Temp As String = sLine.Substring(sPos + 1, sLine.Length - sPos - 1) 'Check that key name is found. If IsMatch(GetKeyData(Temp, KeyData.KeyName), Key) Then 'Store return value. Ret = GetKeyData(sLine, KeyData.KeyValue) End If End If End If Next End If If (Ret = vbNullChar) Then 'Return default value. ReadString = iDefault Else 'Return returned value. ReadString = Ret End If End Function Function SectionExists(ByVal Selection As String) As Boolean 'Returns true or false if a selection exists. Dim bFound As Boolean = False If (Not IniData Is Nothing) Then For Each sLine In IniData Dim selName As String = GetSelection(sLine) 'Check if selection is found. If IsMatch(selName, Selection) Then bFound = True Exit For End If Next End If 'Return result. SectionExists = bFound End Function Public Function LoadFromFile() As Boolean Dim sLine As String Dim mSelection As String = "" Dim sr As StreamReader 'Check that file is found If Not File.Exists(Filename) Then LoadFromFile = False Exit Function End If IniData = New List(Of String) 'Create new string builder object sr = New StreamReader(Filename) 'Read each line of the ini filename. While Not sr.EndOfStream 'Get current line sLine = sr.ReadLine().Trim() 'Check line length and if we have a selection. If (sLine.Length) And IsSelection(sLine) Then mSelection = RemoveBrackets(sLine) End If 'Get value names. If sLine.Length Then 'Add to list. Call IniData.Add(mSelection.ToUpper() + SplitChar + sLine) End If End While 'Close open file stream. Call sr.Close() 'Looks ok to me lets return good result. LoadFromFile = True End Function 'INI TOOLS Private Function GetKeyData(ByVal TempLine As String, ByVal RetType As KeyData) As String Dim Ret As String = vbNullChar 'Check for assign position. Dim aPos As Integer = TempLine.IndexOf(AssignChar) 'Return key name. If (RetType = KeyData.KeyName) Then If (aPos <> -1) Then 'Remove assign char and return key name. Ret = TempLine.Substring(0, aPos).TrimEnd() End If End If 'Return key value. If (RetType = KeyData.KeyValue) Then 'Check for assignment psoition. If (aPos <> -1) Then Ret = TempLine.Substring(aPos + 1) End If End If GetKeyData = Ret End Function Private Function GetSelection(ByVal TmpLine As String) As String Dim sPos As Integer = TmpLine.IndexOf(SplitChar) If (sPos = 0) Then GetSelection = "" Else GetSelection = TmpLine.Substring(0, sPos) End If End Function Private Function IsMatch(ByVal Source As String, ByVal FindStr As String) As Boolean 'Return true if source is the same as findstr. IsMatch = StrComp(Source, FindStr, CompareMethod.Text) = 0 End Function Private Function IsSelection(ByVal TempLine As String) As Boolean 'Checks that string is selection by checking start and end chars. IsSelection = (TempLine.StartsWith(SelectionStart)) And (TempLine.EndsWith(SelectionEnd)) End Function Private Function RemoveBrackets(ByVal TempLine As String) As String 'Remove braces and return selection name. RemoveBrackets = TempLine.Substring(1, TempLine.Length - 2) End Function End Class
Example testCode:[Test] Name=Ben Age=34 Working=yes [Main] Str=Hello World
Code:Public Class Form1 Private myIni As cIniFile Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Create ini object. myIni = New cIniFile() 'File to process. myIni.Filename = "C:\out\test.ini" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oLst As New List(Of String) 'Check if ini loaded. If myIni.LoadFromFile() Then 'Read a value name. Call MsgBox(myIni.ReadString("Test", "Name", "No-Name")) 'Check bool value Call MsgBox("Is Working = " + CStr(myIni.ReadBool("test", "working", False))) 'Check that selection Main exsits Call MsgBox(myIni.SectionExists("main")) 'List selections. Call myIni.ReadSections(oLst) For Each Selname In oLst Call MsgBox(Selname) Next 'List all keys in test selection. Call myIni.ReadSection("test", oLst) For Each ValName In oLst Call MsgBox(ValName) Next Else Call MsgBox("INI Filenmae Not Found Opps.") End If End Sub




Reply With Quote