VB.NET获取INI文件中所有DATE键值问题求助
提取INI文件中所有DATE键的数值
我有一个名为self-test-test.ini的配置文件,想要提取所有DATE键对应的数值,但当前编写的VB.NET GetIniValue函数仅能返回第一个DATE值,尝试循环调用该函数也无法获取全部结果。
现有代码
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim passfail = GetIniValue("DATE", "self-test-test.ini", "FAIL") RichTextBox3.Text = passfail End Sub Private Sub RichTextBox3_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox3.TextChanged End Sub Public Function GetIniValue(key As String, filename As String, Optional defaultValue As String = "") As String Dim inifile As New StreamReader(filename) Dim LineData As String Dim textdata() As String Dim keydata As String = defaultValue Dim done As Boolean = False If File.Exists(filename) Then Do While Not done If inifile.Peek() >= 0 Then LineData = inifile.ReadLine() textdata = Split(LineData, "=") If Trim(textdata(0)) = key Then If UBound(textdata) > 0 Then keydata = Trim(textdata(1)) End If done = True End If Else done = True End If Loop inifile.Close() End If GetIniValue = keydata End Function End Class
INI文件内容
[20E2SN5] DATE=05/01/2019,15:12:12 STATUS=PASS [20R5SN9] DATE=06/21/2019,15:13:13 STATUS=PASS
尝试过的循环代码
Dim passfail = GetIniValue("DATE", "self-test-test.ini", "FAIL") For Each n In passfail RichTextBox3.Text += n.ToString Next
当前结果
05/01/2019,15:12:12
期望结果
05/01/2019,15:12:12 06/21/2019,15:13:13
问题分析
- 原
GetIniValue函数找到第一个匹配的DATE键后,立即设置done = True终止循环,因此只能获取第一个值。 - 原函数返回单个字符串,循环遍历该字符串会逐个输出字符,而非多个匹配值。
解决方案
修改函数使其返回所有匹配的DATE值,以下是调整后的代码:
修改后的获取值函数
Public Function GetAllIniValues(key As String, filename As String, Optional defaultValue As String = "") As List(Of String) Dim values As New List(Of String)() ' 文件不存在时返回默认值 If Not File.Exists(filename) Then values.Add(defaultValue) Return values End If ' 使用Using自动释放资源 Using inifile As New StreamReader(filename) Dim LineData As String ' 遍历整个文件直到结束 While inifile.Peek() >= 0 LineData = inifile.ReadLine() Dim textdata() As String = Split(LineData, "=") ' 确保行包含=且键匹配 If textdata.Length >= 2 AndAlso Trim(textdata(0)) = key Then values.Add(Trim(textdata(1))) End If End While End Using ' 无匹配项时返回默认值 If values.Count = 0 Then values.Add(defaultValue) End If Return values End Function
修改后的按钮点击事件
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim dateValues = GetAllIniValues("DATE", "self-test-test.ini", "FAIL") ' 将所有值用换行符拼接后显示 RichTextBox3.Text = String.Join(Environment.NewLine, dateValues) End Sub
关键修改点
- 函数返回类型改为
List(Of String),用于存储所有匹配的DATE值 - 移除
done变量,遍历整个文件直至结束 - 使用
Using语句自动管理StreamReader资源,避免手动关闭可能引发的问题 - 增加对行格式的判断,防止无
=的行导致索引越界 - 调用时通过
String.Join将多个值用换行符拼接,直接显示在RichTextBox中
内容的提问来源于stack exchange,提问作者EZgraves
相关产品推荐
相关产品推荐

