VB.NET 读取两个大文本文件实现跨文件字符串匹配的方法
VB.NET 双大文件逐行匹配校验实现方案
核心实现逻辑:
- 先提取File2中所有符合要求的目标参数,存入HashSet集合,兼顾去重和高速匹配性能
- 逐行遍历File1,预处理后直接在集合中查找匹配,全程流式读取,内存占用极低,适合大文件场景
- 用Using块自动管理文件流资源,无需手动关闭,避免文件锁定
Public Function FileWriteTest() As Boolean ' 可根据需求调整返回值类型 ' 替换为两个文件的实际路径 Dim file1Path As String = "你的File1路径" Dim file2Path As String = "你的File2路径" ' 存储从File2提取的所有目标参数,HashSet查找速度远高于普通列表 Dim targetParams As New HashSet(Of String)() ' 第一步:读取File2提取所有目标参数 Using file2 As IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(file2Path) Do Until file2.EndOfStream Dim line As String = file2.ReadLine() ' 移除所有空白字符,和原有逻辑一致 Dim noWhiteSpace As New String(line.Where(Function(x) Not Char.IsWhiteSpace(x)).ToArray()) Dim split1 = Split(noWhiteSpace, "=") If split1.Length >= 1 Then ' 避免拆分结果为空引发索引越界 Dim splitStr = split1(0) ' HowImSplittingText替换为你实际的拆分标识字符串 If splitStr.Contains(HowImSplittingText) Then Dim parameter = Split(splitStr, "Module") If parameter.Length >= 2 Then ' 避免拆分不到位引发索引越界 Dim finalParameter = parameter(1) ' 存入目标参数集合 If Not targetParams.Contains(finalParameter) Then targetParams.Add(finalParameter) End If End If End If End If Loop End Using ' 自动释放File2资源 ' 第二步:遍历File1逐行做匹配校验 Using file1 As IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(file1Path) Do Until file1.EndOfStream Dim line As String = file1.ReadLine() ' 按需求处理File1的行:裁剪开头、去空白等,处理规则和File2的参数预处理逻辑对齐 Dim processedLine As New String(line.Where(Function(x) Not Char.IsWhiteSpace(x)).ToArray()) ' 如需裁剪开头指定内容,在这里添加和File2一致的拆分逻辑即可 ' 执行匹配校验 If targetParams.Contains(processedLine) Then ' 匹配成功的自定义处理逻辑,比如记录日志、输出匹配内容等 Console.WriteLine($"匹配到目标内容:{processedLine}") End If Loop End Using ' 自动释放File1资源 Return True End Function
注意事项
- 如果匹配规则不是完全相等,而是包含匹配,把
targetParams.Contains(processedLine)替换为遍历集合判断processedLine.Contains(param)即可 - 如果File2只会提取到1个目标参数,可以不用HashSet,直接用单个String变量存储即可
内容的提问来源于stack exchange,提问作者PJHytfihS
相关产品推荐
相关产品推荐

