none
Die Werte in eine Texdatei in eine andere Texdatei in eine bestimmte Zeile ersetzen

    Frage

  • Hallo,

    ich möchte manche Werte  in eine Textdatei in eine andere Texdatei in eine bestimmte Zeile ersetzten.

    Beispiel:

    Textdatei: A.txt:

    X0(mm), Y0(mm), Z0(mm), Temp0(degC),
    0.00, 0.00, 0.00, 22.85, 191.23
    0.00, 0.00, 0.00, 23.18, 191.23

    Texdatei: B.txt:

    Baugeruest;Bau1;Bau2
    2018-10-18 15:15:00;100;150

    Endergebniss Output

    Testdatei C.txt:

    Baugeruest;Bau1;Bau2
    2018-10-18 15:15:00;22.85;191.23

    Könnt ihr mir dabei helfen?

    vielen Dank

    Samstag, 3. November 2018 09:32

Alle Antworten

  • Hi,
    hier mal eine kleine Konsolendemo als Anregung:

    Imports System.IO
    
    Module Module1
      Sub Main()
        Try
          Dim c As New Demo
          c.Execute()
        Catch ex As Exception
          Console.WriteLine(ex.Message)
        End Try
        Console.WriteLine("weiter mit Taste")
        Console.ReadKey()
      End Sub
    
      Friend Class Demo
        Private fileA As String = "c:\temp\a.txt"
        Private fileB As String = "c:\temp\b.txt"
        Private fileC As String = "c:\temp\c.txt"
    
        Friend Sub Execute()
          Dim i As Integer = 0
          Using wrt As New StreamWriter(fileC)
            Using rdrA As New StreamReader(fileA)
              Using rdrB As New StreamReader(fileB)
                While Not rdrA.EndOfStream
                  Dim lineA As String = rdrA.ReadLine
                  If rdrB.EndOfStream Then Exit Sub
                  Dim lineB As String = rdrB.ReadLine
                  If i = 0 Then
                    wrt.WriteLine(lineB)
                  Else
                    Dim inpA = lineA.Split(","c)
                    Dim inpB = lineB.Split(";"c)
                    wrt.WriteLine($"{inpB(0)};{inpA(3).Trim()};{inpA(4).Trim()}")
                  End If
                  i += 1
                End While
              End Using
            End Using
          End Using
        End Sub
    
      End Class
    
    End Module


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort vorgeschlagen Peter Fleischer Samstag, 3. November 2018 12:18
    Samstag, 3. November 2018 12:18
  • Hi,
    hier mal eine kleine Konsolendemo als Anregung:

    Imports System.IO
    
    Module Module1
      Sub Main()
        Try
          Dim c As New Demo
          c.Execute()
        Catch ex As Exception
          Console.WriteLine(ex.Message)
        End Try
        Console.WriteLine("weiter mit Taste")
        Console.ReadKey()
      End Sub
    
      Friend Class Demo
        Private fileA As String = "c:\temp\a.txt"
        Private fileB As String = "c:\temp\b.txt"
        Private fileC As String = "c:\temp\c.txt"
    
        Friend Sub Execute()
          Dim i As Integer = 0
          Using wrt As New StreamWriter(fileC)
            Using rdrA As New StreamReader(fileA)
              Using rdrB As New StreamReader(fileB)
                While Not rdrA.EndOfStream
                  Dim lineA As String = rdrA.ReadLine
                  If rdrB.EndOfStream Then Exit Sub
                  Dim lineB As String = rdrB.ReadLine
                  If i = 0 Then
                    wrt.WriteLine(lineB)
                  Else
                    Dim inpA = lineA.Split(","c)
                    Dim inpB = lineB.Split(";"c)
                    wrt.WriteLine($"{inpB(0)};{inpA(3).Trim()};{inpA(4).Trim()}")
                  End If
                  i += 1
                End While
              End Using
            End Using
          End Using
        End Sub
    
      End Class
    
    End Module


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Danke für deine Antwort. Ich kenne mich eher in VB6 aus. Daher tut es mir schon ab jetzt leid wenn ich dir unsinnige Fragen stelle. Ich versuche das Verfahren unter einen Button zu automatisieren. In der A.txt Datei sind die Trtennzeichen Leertasten. In der B.txt und C.txt Dateien sind es die Semicolons. Wie kann mann das am geschicksten machen? Vielen Dank

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim fileA As String = "c:\temp\a.txt"
            Dim fileB As String = "c:\temp\b.txt"
            Dim fileC As String = "c:\temp\c.txt"
    
            Dim i As Integer = 0
            Using wrt As New StreamWriter(fileC)
                Using rdrA As New StreamReader(fileA)
                    Using rdrB As New StreamReader(fileB)
                        While Not rdrA.EndOfStream
                            Dim lineA As String = rdrA.ReadLine
                            If rdrB.EndOfStream Then Exit Sub
                            Dim lineB As String = rdrB.ReadLine
                            If i = 0 Then
                                wrt.WriteLine(lineB)
                            Else
                                Dim inpA = lineA.Split(","c)
                                Dim inpB = lineB.Split(";"c)
                                wrt.WriteLine($"{inpB(0)};{inpA(3).Trim()};{inpA(4).Trim()}")
                            End If
                            i += 1
                        End While
                    End Using
                End Using
            End Using
        End Sub

    Mittwoch, 7. November 2018 15:13
  • Hi,
    in Deiner Ausgangsfrage gab es Kommata als Trennzeichen.

    0.00, 0.00, 0.00, 22.85, 191.23

    Jetzt sind es auf einmal Leerzeichen?

    … In der A.txt Datei sind die Trennzeichen Leertasten. In der B.txt und C.txt Dateien sind es die Semicolons. …

    Setze einfach im Aufruf der Split-Methode das Trennzeichen, was wirklich dort steht.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 7. November 2018 16:03