0

さまざまな列を含む 2 つのテキスト ファイルがあり、各列はタブ (" ") で区切られています。私がやろうとしていることは次のとおりです: -

  • テキスト ファイル 2 の列 1 の値にテキスト ファイル 1 の列 1 の値が含まれていない場合は、そのフィールドをテキスト ファイル 2 に追加し、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)

上記のコーディングを使用していますが、2 番目の列が削除されますか?

4

1 に答える 1

1

キーと値のペアを最初のテキスト ファイルに格納するには、辞書を使用することをお勧めします。次に、2 番目のテキスト ファイルのデータを解析するときに、ディクショナリ内のデータを簡単に検索および変更できます。例えば:

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 に答える