2012-06-20 2 views
0

다양한 열이있는 두 개의 텍스트 파일이 있으며, 각 열은 탭 ("")으로 구분됩니다. 텍스트 파일의 값이 2 열 1 텍스트 파일 1 열 1의 값을 포함하지 않는 경우텍스트 파일에 새 필드를 추가하고 값을 추가하는 방법은 무엇입니까?

  • 그 필드를 추가 파일이 텍스트와를 추가 -이 : 난 할 노력하고있어 다음이 두 번째 열 1, 같은

    문자열 1

  • 텍스트 파일의 값이 1 열이 이미 텍스트 파일에 나타납니다 (2)는 1 열 1 그럼 그냥 값에 +1을 추가, 그렇다면 위의 값의 경우 텍스트 파일 1 열 1 및 텍스트 파일 2 열 1에 이미 있습니다.

    문자열이

그리고 다시 등등

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) 

내가 위의 코드를 사용하지만 두 번째 열을 제거?

답변

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 
+0

안녕하세요, 스티브, 도와 주셔서 감사합니다. 코딩이 제대로 작동하지 않습니까? 예를 들어 텍스트 파일 2가 비어 있으면 텍스트 파일 2의 열 1에있는 테스트 파일 1의 모든 열을 나열하고 그 옆에 1을 표시해야하지만 현재 텍스트 파일 2는 비어 있습니까? – JackSparrow

+0

잘 모르겠습니다. 어쩌면 당신이 잘못하고있는 다른 것일 수도 있습니다. 왜냐하면 그 코드는 방금 설명한 시나리오에서 저에게 효과적이기 때문입니다. –

+0

많은 분들이 오타되었습니다. – JackSparrow

관련 문제