You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VB.NET按关键字匹配两个文本文件并实现内容更新?

VB.NET中对比两个文本文件并更新内容的实现方案

先明确需求:用File2中的对应值更新File1的内容,同时根据不同情况添加备注,示例文件如下:

示例文件

File1内容:

SSN1    AA
SSN2    BB
SSN3    CC
SSN4
SSN5    DD

File2内容:

SSN1   ZZ
SSN3 
SSN5   YY

期望输出:

SSN1    ZZ
SSN2    BB  - 未更新:因File2中无此条目
SSN3    CC  - 未更新:因File2中对应值为空
SSN4        - 未更新:因File2中无此条目
SSN5    YY

实现步骤与代码

1. 读取File2到字典

把File2的内容加载到Dictionary(Of String, String)中,通过SSN快速查找对应更新值,提升效率:

' 初始化字典存储File2的SSN和对应值
Dim file2Dict As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)

' 读取File2的每一行
For Each line In File.ReadAllLines("File2.txt")
    If String.IsNullOrWhiteSpace(line) Then Continue For
    
    ' 按空白字符拆分(支持多个空格/tab分隔)
    Dim parts = line.Split(New Char() {" "c, vbTab}, StringSplitOptions.RemoveEmptyEntries)
    Dim ssn = parts(0)
    Dim value = If(parts.Length > 1, parts(1), "")
    
    ' 存入字典(重复SSN会被后续条目覆盖)
    If file2Dict.ContainsKey(ssn) Then
        file2Dict(ssn) = value
    Else
        file2Dict.Add(ssn, value)
    End If
Next

2. 处理File1并生成输出

逐行读取File1,结合字典内容判断是否更新,并添加对应备注:

Dim outputLines As New List(Of String)

For Each line In File.ReadAllLines("File1.txt")
    If String.IsNullOrWhiteSpace(line) Then
        outputLines.Add(line)
        Continue For
    End If
    
    ' 拆分当前行的SSN和原有值
    Dim parts = line.Split(New Char() {" "c, vbTab}, StringSplitOptions.None)
    Dim ssn = parts(0)
    Dim originalValue = If(parts.Length > 1, parts(1), "")
    Dim newLine As String = ""
    
    If file2Dict.ContainsKey(ssn) Then
        Dim updateValue = file2Dict(ssn)
        If Not String.IsNullOrWhiteSpace(updateValue) Then
            ' 有有效更新值,替换原有值
            newLine = $"{ssn}    {updateValue}"
        Else
            ' File2中对应值为空,保留原值并加备注
            newLine = $"{ssn}    {originalValue}  - 未更新:因File2中对应值为空"
        End If
    Else
        ' File2中无此SSN条目,保留原值并加备注
        newLine = $"{ssn}{If(String.IsNullOrWhiteSpace(originalValue), "", $"    {originalValue}")}  - 未更新:因File2中无此条目"
    End If
    
    outputLines.Add(newLine)
Next

' 将结果写入输出文件
File.WriteAllLines("Output.txt", outputLines)

代码说明

  • 拆分File2时用StringSplitOptions.RemoveEmptyEntries避免多个空格产生空元素;处理File1时用StringSplitOptions.None保留原有格式空白。
  • 字典用StringComparer.OrdinalIgnoreCase可忽略SSN大小写差异(不需要可移除)。
  • 兼容空行处理,避免运行报错。
  • 输出保持SSN与值之间的四空格对齐,和示例格式一致。

内容的提问来源于stack exchange,提问作者MYTWO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:53:26