比较文件,然后用新文件覆盖原始文件

时间:2020-09-14 16:42:23

标签: vb.net

我正在寻找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与文件A AAA相同,使用小写字母将其与源文件区分开。

bbb与文件A BBB相同,使用小写字母将其与源文件区分开。

ccc与文件A CCC相同,使用小写字母将其与源文件区分开。

111是用户行

222是用户行

333是用户行

1 个答案:

答案 0 :(得分:0)

由于您尚未发布任何代码,因此我不会从头开始编写整个内容,但是如果您在实际代码中遇到麻烦,我很乐于分享和解释我的方法和帮助。

第1步

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

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

示例:Dim CollectionA As List(Of String)

第2步

读取文件A的每一行,但是在处理每一行时,您将用它做三件事:

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

第3步

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

第4步

使用for-each循环通过检查集合的.IndexOf方法来检查集合B中的每个值,以查看集合A中的每个值,除非进行检查,否则您将获取B项目的.ToLower在A的集合的ToLower版本中检查其索引值。如果索引大于-1,则表示它已经存在,因此您无需将其添加到输出集合中;但是如果索引为-1,则它不在A的小写集合中,因此您可以添加原始(非- B字符串的ToLower版本)到输出集合。

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。仅从资源的角度来看,这将使用更少的内存,并且效率更高。但是,我发现我自己的程序会随着时间的流逝而变得越来越复杂,并且随着程序的发展,将事情放在明显不同的存储桶中通常很方便。

尝试一下,一旦您有一些代码要共享,请在需要帮助时将其发布。