Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.NET中编辑某些文件_.net_Vb.net_Vb.net 2010 - Fatal编程技术网

在VB.NET中编辑某些文件

在VB.NET中编辑某些文件,.net,vb.net,vb.net-2010,.net,Vb.net,Vb.net 2010,我有两个文本文件,C:\Test1.txt和C:\Test2.txt C:\Test1.txt数据由一列组成,列之间用空格(“”)分隔: 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 Merced

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

C:\Test1.txt
数据由一列组成,列之间用空格(“”)分隔:

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
BMW White
Mercedez Silver
Bentley Black
Audi Blue
Honda Gold
运行代码后:

C:\Test2.txt

BMW
Mercedez
Bentley
Audi
Honda
BMW White
Mercedez Silver
Bentley Black
Audi Blue
Honda Gold

因此,您只想在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)

请注意,对于异常数据来说,它还不安全。

因此,从技术角度来说,您的任务是(根据最初的问题和评论):

  • 假设第一个文件是汽车定制颜色的字典
  • 假设第二个文件是make的列表
  • 您需要使用第一个文件找到这些品牌的匹配项
  • 忽略两个输入文件中的空行
  • 如果找不到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按预期工作后,您可以更改代码以替换该文件。

您好,不,这不是家庭作业。对不起,到目前为止,我如何发布我的代码?我在苦苦挣扎:(蒂姆,这个编码看起来不错。1)忽略任何空行会很困难吗?2)如果在另一个文本文件中找不到汽车,那么就让它保持空白吗?@user1413746:有什么困难吗?如果您至少使用.NET3.5,您可以复制/粘贴它。正如我已经提到的,如果你的文件包含更多的空格,这是不安全的。但无论如何,它应该给你一个想法。基本上,它是用文件1中的匹配行覆盖文件2中的所有行(根据汽车)。