在VB.NET中编辑一些文件

时间:2012-05-23 22:52:25

标签: .net vb.net vb.net-2010

我有两个文本文件,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

2 个答案:

答案 0 :(得分: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)

请注意,这对于特殊数据来说还不安全。

答案 1 :(得分: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。