如何读取TXT文件特定单词所在行?配置文件读取代码咨询
解决方案:VB实现配置文件读取与特定内容行提取
我来帮你完善配置文件读取的代码,同时实现读取TXT中包含特定单词的行功能,分两部分说明:
一、完善配置文件读取逻辑
你原代码的问题在于没有正确释放StreamReader资源,而且代码可以更简洁。推荐使用Using语句自动管理资源,或者直接用File.ReadAllLines简化操作:
优化后的配置文件读取代码
Dim preferences As New FileInfo(".\settings.conf") If preferences.Exists Then ' 方法1:使用Using自动释放StreamReader资源 Using objReader As New System.IO.StreamReader(".\settings.conf") Dim tmpLine_theme As String Do While objReader.Peek() <> -1 tmpLine_theme = objReader.ReadLine() If tmpLine_theme.StartsWith("theme_selected: ") Then tmpLine_theme = tmpLine_theme.Replace("theme_selected: ", "") theme_box.Text = tmpLine_theme MsgBox("Theme: " & tmpLine_theme) ' 补全你截断的代码 Exit Do ' 找到目标行后直接退出循环,提升效率 End If Loop End Using ' 自动关闭并释放StreamReader ' 方法2:用File.ReadAllLines让代码更简洁 ' For Each line In File.ReadAllLines(".\settings.conf") ' If line.StartsWith("theme_selected: ") Then ' theme_box.Text = line.Replace("theme_selected: ", "") ' MsgBox("Theme: " & theme_box.Text) ' Exit For ' End If ' Next End If
二、实现读取TXT中包含特定单词的行
下面是一个可复用的函数,传入文件路径和目标单词,返回所有包含该单词的行:
Imports System.IO ' 读取包含特定单词的行 Function GetLinesContainingWord(filePath As String, targetWord As String) As List(Of String) Dim matchingLines As New List(Of String) If Not File.Exists(filePath) Then MsgBox("文件不存在!") Return matchingLines End If ' 逐行读取并检查匹配 Using reader As New StreamReader(filePath) Dim currentLine As String Do While reader.Peek() <> -1 currentLine = reader.ReadLine() ' 如果你需要区分大小写,去掉StringComparison.OrdinalIgnoreCase If currentLine.Contains(targetWord, StringComparison.OrdinalIgnoreCase) Then matchingLines.Add(currentLine) End If Loop End Using Return matchingLines End Function ' 调用示例 Dim targetLines As List(Of String) = GetLinesContainingWord(".\content.txt", "特定单词") For Each line In targetLines Console.WriteLine(line) ' 或者输出到控件、保存到文件等操作 Next
注意事项
- 使用
StringComparison.OrdinalIgnoreCase可以忽略大小写匹配,如果需要精确区分大小写,去掉这个参数即可。 - 所有文件操作都用
Using语句,确保IO资源被正确释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者user8267799
相关产品推荐
相关产品推荐

