首页 > 解决方案 > 比较文件然后用新文件覆盖原始文件

问题描述

我正在寻找一个 vb 代码来执行以下操作:

  1. 比较文件 A文件 B

文件 A(位于驱动器 L:\source 中的源)包含以下内容:

AAA
BBB
CCC
DDD
1A1B

文件 B(位于本地驱动器 D:\user 中的用户)包含以下内容:

aaa
bbb
ccc
111
222
333
  1. 用文件 B (源)覆盖文件 A(用户),使文件 A(最终用户文件)如下所示:
AAA
BBB
CCC
DDD
1A1B
111
222
333

笔记:

源文件 A:

AAA与文件 B 中的行相同aaa

BBB与文件 B 中的行相同bbb

CCC与文件 B 中的行相同ccc

DDD文件 B 中不存在。

1A1B文件 B 中不存在。

用户文件 B

aaa与 File A 是同一行AAA,小写用于将其与源文件区分开来。

bbb与 File A 是同一行BBB,小写用于将其与源文件区分开来。

ccc与 File A 是同一行CCC,小写用于将其与源文件区分开来。

111是用户线

222是用户线

333是用户线

标签: vb.net

解决方案


由于您没有发布任何代码,我不会从头开始编写整个内容,但如果您在实际代码中遇到问题,我很乐意分享和解释我的方法和帮助。

步骤1

我将创建 4 个列表(集合):

  • 文件 A 中的每个原始字符串值 1:CollectionA
  • 文件 B 中的每个原始字符串值 1:CollectionB
  • .ToLower文件 A 中每个字符串的每个值 1 : CollectionALowers
  • 1 为您的输出值:CollectionOutput

例子:Dim CollectionA As List(Of String)

第2步

读取文件 A 的每一行,但是当你处理每一行时,你会用它做 3 件事:

  1. 将值复制到 CollectionA
  2. 将值复制到 CollectionOutput
  3. 将值的版本复制.ToLower到 CollectionALowers

第 3 步

将文件 B 的每一行读入 CollectionB。

第4步

使用 for-each 循环检查集合 B 中的每个值,以通过检查集合的 .IndexOf 方法来查看其是否在 CollectionA 中,除非在进行检查时,您将获取.ToLowerB 项并在 ToLower 中检查其索引值A 收藏的版本。如果它的索引 > -1 意味着它已经存在所以你不需要将它添加到输出集合中,但是如果索引是 -1 那么它不在 A 的小写集合中所以你添加原始的(非ToLower) 版本的 B 字符串到输出集合。

For Each item as String in CollectionB
  if CollectionALowers.IndexOf(item.tolower) = -1 Then
    CollectionOutput.Add(item)
  end if
Next

第 5 步

将 CollectionOutput 的内容写回文件 A,覆盖原始文件内容。

想法

说了以上所有内容,我不确定您是否真的需要单独的 CollectionOutput。相反,您可以将该项目添加到 CollectionA。仅从资源的角度来看,这将使用更少的内存并且更有效。但是,我发现我自己的程序会随着时间的推移而增长并变得更加复杂,并且随着程序的发展,将事物保存在截然不同的存储桶中通常会派上用场。

试一试,一旦你有一些代码要分享,如果你需要帮助,请发布它。


推荐阅读