VB.NET读取分号分隔TXT构建数组查找匹配文本异常求助
问题诊断
你现有代码存在几处明确的语法和逻辑错误,直接导致运行异常、查找失败:
DivideTranslSource函数存在基础语法错误:Substring方法第一个参数要求传入整数类型的起始索引,你传入了字符串变量;ReDim Preserve调整数组维度时要求传入整数参数,你传入了字符串变量,这个函数本身无法正常编译运行,可直接弃用。DivideTranslSource1存在逻辑漏洞:- 二维数组维度定义错误:VB.NET数组为0起始索引,你传入列数参数2初始化数组时,实际创建了3列的数组,存在冗余空间;
- 无容错处理:遇到空行、无分隔符的无效行时,直接按索引取拆分结果会触发索引越界异常;
- 拆分逻辑错误:直接使用
Split方法拆分所有匹配的分隔符,如果翻译文本本身包含分号,会被拆分为多段,导致文本内容丢失。
FindTextTranslation循环边界错误:GetUpperBound(0)获取的是二维数组第一维(列维度)的最大索引,你列数固定为2时该值为1,循环仅会执行1次,无法遍历所有存储的条目。
推荐实现方案
针对键值对查找场景,直接使用Dictionary(Of String, String)存储数据比二维数组更简洁、查找效率更高,无需手动维护数组维度、处理重定义问题,适配你百余条数据的场景完全足够,也方便后续多语言切换。
完整代码
' 全局字典存储ID与对应翻译文本的键值对 Private translationDict As New Dictionary(Of String, String) ''' <summary> ''' 加载指定路径的语言配置文件 ''' </summary> ''' <param name="filePath">语言文件完整路径</param> ''' <param name="splitChar">ID与文本的分隔符,默认为分号</param> Public Sub LoadLanguageFile(filePath As String, Optional splitChar As Char = ";"c) translationDict.Clear() ' 校验文件是否存在 If Not IO.File.Exists(filePath) Then Throw New IO.FileNotFoundException($"语言文件加载失败:{filePath}") End If ' 逐行读取文件内容,自动释放文件流 For Each line As String In IO.File.ReadAllLines(filePath) ' 跳过空行 If String.IsNullOrWhiteSpace(line) Then Continue For ' 仅以第一个出现的分隔符拆分,避免文本内部分号被错误分割 Dim splitPos As Integer = line.IndexOf(splitChar) If splitPos < 0 Then Continue For ' 跳过无分隔符的无效行 Dim textId As String = line.Substring(0, splitPos).Trim() Dim textContent As String = line.Substring(splitPos + 1).Trim() ' 避免重复ID触发异常 If Not translationDict.ContainsKey(textId) Then translationDict.Add(textId, textContent) End If Next End Sub ''' <summary> ''' 根据文本ID查找对应翻译内容 ''' </summary> ''' <param name="textId">配置的文本ID</param> ''' <returns>找到返回对应文本,未找到返回空字符串</returns> Public Function FindTextTranslation(textId As String) As String Dim result As String = String.Empty If translationDict.TryGetValue(textId, result) Then Return result End If Return String.Empty End Function
调用方式
程序初始化、切换语言时直接调用加载方法即可,无需手动处理数组逻辑:
' 加载意大利语配置文件 LoadLanguageFile("C:\VisualStudio2019\LangFiles\comments-0.txt") ' 查找指定ID的文本 Dim showText As String = FindTextTranslation("IDelement1") ' 切换英语时直接加载对应文件即可,原有内容会被自动清空 ' LoadLanguageFile("C:\VisualStudio2019\LangFiles\comments-1.txt")
注意事项
- 配置文件建议统一使用UTF-8编码保存,避免读取时出现中文、特殊字符乱码;
- 如果后续需要给配置文件加注释,可以约定以
#开头的行为注释行,在读取时增加判断跳过即可,方便非开发人员修改配置。
内容的提问来源于stack exchange,提问作者ErCapoAlex
相关产品推荐
相关产品推荐

