0

我有两个包含不同列的文本文件,每列由制表符(“”)分隔。我想要做的是以下几点: -

  • 如果文本文件 2 第 1 列中的值不包含文本文件 1 第 1 列中的任何值,则将该字段添加到文本文件 2 并将 1 添加到第二列,如下所示

    字符串 1

  • 如果文本文件 2 第 1 列中的值已经出现在文本文件 1 第 1 列中,则只需将 +1 添加到该值中,因此如果上述值已经在文本文件 1 第 1 列和文本文件 2 第 1 列中,则它将显示为.

    字符串 2

如果它再次发生

String 3

等等。

到目前为止,我有以下编码。

Dim lines1 As New List(Of String)(IO.File.ReadAllLines("File1"))
Dim lines2 As New List(Of String)(IO.File.ReadAllLines("File2"))
IO.File.WriteAllLines("File2", lines1.ToArray) & +1)

更新

Dim lines1 As New List(Of String)(IO.File.ReadAllLines("D:\Test\File6.txt"))
        Dim lines2 As New List(Of String)(IO.File.ReadAllLines("D:\Test\File5.txt"))

        Dim values As New Dictionary(Of String, Integer)()
        For Each line As String In lines1
            Dim fields() As String = line.Split(" "c)
            If fields.Length > 1 Then
                values(fields(0)) = Integer.Parse(fields(1))
            End If
        Next

        For Each line As String In lines2
            Dim fields() As String = line.Split(" "c)
            If fields.Length > 0 Then
                If values.ContainsKey(fields(0)) Then
                    values(fields(0)) = values(fields(0)) + 1
                Else
                    values(fields(0)) = 1
                End If
            End If
        Next

        lines1.Clear()
        For Each pair As KeyValuePair(Of String, Integer) In values
            lines1.Add(pair.Key + " " + pair.Value.ToString())
        Next

        IO.File.WriteAllLines("D:\Test\File6.txt", lines1.ToArray)

我使用上面的编码,但它删除了第二列?

4

1 回答 1

1

我建议使用字典将键/值对存储在您的第一个文本文件中。然后,您可以在解析第二个文本文件中的数据时轻松搜索和修改字典中的数据。例如:

Dim lines1 As New List(Of String)(New String() {"A a 1", "B b 2", "C c 3"})
Dim lines2 As New List(Of String)(New String() {"A a", "D d"})

Dim values As New Dictionary(Of String, Integer)()
For Each line As String In lines1
    Dim fields() As String = line.Split(" "c)
    If fields.Length > 2 Then
        values(fields(0) + " " + fields(1)) = Integer.Parse(fields(2))
    End If
Next

For Each line As String In lines2
    Dim fields() As String = line.Split(" "c)
    If fields.Length > 1 Then
        Dim key As String = fields(0) + " " + fields(1)
        If values.ContainsKey(key) Then
            values(key) = values(key) + 1
        Else
            values(key) = 1
        End If
    End If
Next

lines1.Clear()
For Each pair As KeyValuePair(Of String, Integer) In values
    lines1.Add(pair.Key + " " + pair.Value.ToString())
Next
于 2012-06-20T12:30:39.730 回答