从 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