2

我有两个文本文件,C:\Test1.txtC:\Test2.txt.

C:\Test1.txt数据由以空格 (" ") 分隔的列组成:

Data Data
Data Data
Data Data

C:\Test2.txt数据包括:

Data
Data
Data

Test2 第 1 列中的字段是第 1 列 Test1 中的字段。我正在尝试从 Test1 添加匹配字段。例如:

C:\Test1.txt

Mercedez Silver
Bentley Black
Audi Blue
BMW White
Honda Gold

C:\Test2.txt

BMW
Mercedez
Bentley
Audi
Honda

在我运行代码后:

C:\Test2.txt

BMW White
Mercedez Silver
Bentley Black
Audi Blue
Honda Gold
4

2 回答 2

3

因此,您只想在 txt2 中找到也在 txt1 中的所有汽车,并从 txt1 覆盖 txt2 中的行。那么这应该工作:

Dim l1Infos = From l1 In IO.File.ReadAllLines("C:\Test1.txt")
              Select New With {.Line = l1, .Tokens = l1.Split(" "c)}
Dim result = From l1 In l1Infos
             Join l2 In IO.File.ReadAllLines("C:\Test2.txt")
             On l1.Tokens(0) Equals l2
             Select l1.Line
IO.File.WriteAllLines("C:\Test2.txt", result)

请注意,对于异常数据,它尚不安全。

于 2012-05-23T23:08:58.197 回答
0

因此,您在技术方面的任务是这样的(根据原始问题和评论):

  • 假设第一个文件是汽车制造颜色的字典。
  • 假设第二个文件是一个品牌列表。
  • 您需要使用第一个文件为这些品牌找到匹配项。
  • 忽略两个输入文件中的空行。
  • 如果没有找到 make ,则放置一个空字符串作为颜色。

一个老派的解决方案可以分为三个部分:

'read the first file into a dictionary of make to color
Dim dict As New Dictionary(Of String, String)
For Each line As String In IO.File.ReadAllLines("C:\Test1.txt")
  Dim a() As String = line.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
  If a.Length = 0 Then Continue For 'ignore blank lines
  Dim key As String = a(0)
  Dim value As String = a(1)
  dict.Add(key, value)
Next

'find matches for makes listed in the second file and prepare output
Dim outputLines As New List(Of String)
For Each key As String In IO.File.ReadAllLines("C:\Test2.txt")
  If key = String.Empty Then Continue For 'ignore blank lines
  Dim value As String = Nothing
  dict.TryGetValue(key, value) 'leave Color blank if not found
  outputLines.Add(String.Format("{0} {1}", key, value))
Next

'write output
IO.File.WriteAllLines("C:\Test3.txt", outputLines)

为可扩展性而构建,可以根据您的需要轻松地进一步调整上述内容。请注意,我正在输出到另一个文件(#3)。这是为了测试目的而保留输入。您想保留输入以防出现问题,并且需要快速修复并重新运行程序。在确定它按预期工作后,您可以更改代码以替换文件 #2。

于 2013-12-22T00:40:14.620 回答