从 Ini 文件读取数据 Vb .Net
Reading Data from an Ini File Vb .Net
我正在从 INI 文件中读取数据。 INI 文件看起来像这样
[config]
TotalElements=16
#Special Case only elements
ElementNo1=9
ElementNo2=10
ElementNo3=11
ElementNo4=12
#
ElementNo5=2,17
ElementNo6=2,18
ElementNo7=2,19
ElementNo8=2,20
#
ElementNo9=3,17
ElementNo10=3,18
ElementNo11=3,19
ElementNo12=3,20
#
# Special Case only Elements
ElementNo13=9
ElementNo14=10
ElementNo15=11
ElementNo16=12
我正在像这样从文件中读取数据
Dim inifile As New IniFile()
inifile.Load(filePath)
ElementValue = inifile.Sections("config").Keys("TotalElements").Value
For i = 1 To totalElement
elementValue = iniSetting.Sections("config").Keys("ElementNo" & i)Value
ListOfElementNumbers.Add(New ElementMapping With {.ElementNumber = i, .ElementValue =
ElementValue, .specialElement = SpecialElement.SpecialElementValue})
Next
数据结构如下所示
Public Class ElementMapping
Public ElementNumber As Integer
Public ElementValue As Integer
Public specialElement As SpecialElement
End Class
Public Enum SpecialElement
SpecialElementValue
End Enum
现在我想做的是,当我阅读 INI 文件时,注释 "#Special Case only elements" 来自下一行,直到 "#" 又来了 我想在我的数据结构中将它分配给 Enum。如果这个评论再次出现在文件中的某个地方,我也想对那个特殊数据做同样的事情。我正在使用 "MadMilkman.Ini" 库从 Ini 文件中读取数据。
试试这个:
Public Class ElementMapping
Public ElementNumber As Integer
Public ElementValue As Integer
Public SpecialElement As Nullable(Of SpecialElement)
End Class
Dim iniOptions As New IniOptions() With {.CommentStarter = IniCommentStarter.Hash}
Dim inifile As New IniFile(iniOptions)
' ...
Dim isSpecialCase = False
For i = 1 To totalElement
Dim iniKey = iniSetting.Sections("config").Keys("ElementNo" & i)
Dim iniValue = iniKey.Value
If (String.Equals(iniKey.TrailingComment.Text, String.Empty)) Then
isSpecialCase = False
ElseIf (iniKey.TrailingComment.Text?.IndexOf("Special Case only elements", StringComparison.OrdinalIgnoreCase) >= 0) Then
isSpecialCase = True
End If
Dim element As New ElementMapping With {.ElementNumber = i, .ElementValue = iniValue}
If (isSpecialCase) Then element.SpecialElement = SpecialElement.SpecialElementValue
ListOfElementNumbers.Add(element)
Next
简而言之,我已将 ElementMapping.SpecialElement
更改为可空类型,以便我可以区分元素何时具有特殊值以及何时不具有特殊值。
我正在使用 isSpecialCase
来检测密钥是否在要求的范围内。如果是,那么我将 ElementMapping.SpecialElement
属性 设置为 SpecialElementValue
,否则它将是 Nothing
.
对于您提供的 INI 示例,这将导致您的前 4 个和最后 4 个元素具有 SpecialElementValue
,其余元素将具有 Nothing
。
最后,我建议您不要使用这种可为 null 的类型,而是考虑使用类似这样的类型:
Public Enum SpecialElement
None,
SpecialElementValue
End Enum
那么您将使用 SpecialElement.None
.
而不是 Nothing
我正在从 INI 文件中读取数据。 INI 文件看起来像这样
[config]
TotalElements=16
#Special Case only elements
ElementNo1=9
ElementNo2=10
ElementNo3=11
ElementNo4=12
#
ElementNo5=2,17
ElementNo6=2,18
ElementNo7=2,19
ElementNo8=2,20
#
ElementNo9=3,17
ElementNo10=3,18
ElementNo11=3,19
ElementNo12=3,20
#
# Special Case only Elements
ElementNo13=9
ElementNo14=10
ElementNo15=11
ElementNo16=12
我正在像这样从文件中读取数据
Dim inifile As New IniFile()
inifile.Load(filePath)
ElementValue = inifile.Sections("config").Keys("TotalElements").Value
For i = 1 To totalElement
elementValue = iniSetting.Sections("config").Keys("ElementNo" & i)Value
ListOfElementNumbers.Add(New ElementMapping With {.ElementNumber = i, .ElementValue =
ElementValue, .specialElement = SpecialElement.SpecialElementValue})
Next
数据结构如下所示
Public Class ElementMapping
Public ElementNumber As Integer
Public ElementValue As Integer
Public specialElement As SpecialElement
End Class
Public Enum SpecialElement
SpecialElementValue
End Enum
现在我想做的是,当我阅读 INI 文件时,注释 "#Special Case only elements" 来自下一行,直到 "#" 又来了 我想在我的数据结构中将它分配给 Enum。如果这个评论再次出现在文件中的某个地方,我也想对那个特殊数据做同样的事情。我正在使用 "MadMilkman.Ini" 库从 Ini 文件中读取数据。
试试这个:
Public Class ElementMapping
Public ElementNumber As Integer
Public ElementValue As Integer
Public SpecialElement As Nullable(Of SpecialElement)
End Class
Dim iniOptions As New IniOptions() With {.CommentStarter = IniCommentStarter.Hash}
Dim inifile As New IniFile(iniOptions)
' ...
Dim isSpecialCase = False
For i = 1 To totalElement
Dim iniKey = iniSetting.Sections("config").Keys("ElementNo" & i)
Dim iniValue = iniKey.Value
If (String.Equals(iniKey.TrailingComment.Text, String.Empty)) Then
isSpecialCase = False
ElseIf (iniKey.TrailingComment.Text?.IndexOf("Special Case only elements", StringComparison.OrdinalIgnoreCase) >= 0) Then
isSpecialCase = True
End If
Dim element As New ElementMapping With {.ElementNumber = i, .ElementValue = iniValue}
If (isSpecialCase) Then element.SpecialElement = SpecialElement.SpecialElementValue
ListOfElementNumbers.Add(element)
Next
简而言之,我已将 ElementMapping.SpecialElement
更改为可空类型,以便我可以区分元素何时具有特殊值以及何时不具有特殊值。
我正在使用 isSpecialCase
来检测密钥是否在要求的范围内。如果是,那么我将 ElementMapping.SpecialElement
属性 设置为 SpecialElementValue
,否则它将是 Nothing
.
对于您提供的 INI 示例,这将导致您的前 4 个和最后 4 个元素具有 SpecialElementValue
,其余元素将具有 Nothing
。
最后,我建议您不要使用这种可为 null 的类型,而是考虑使用类似这样的类型:
Public Enum SpecialElement
None,
SpecialElementValue
End Enum
那么您将使用 SpecialElement.None
.
Nothing