Textdateien Inhalt vergleiche und blockweise bei nicht vorhandensein in neue TXT kopieren

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von samson.

    Ein StreamReader kann ein Encoding aus dem Datei-BOM auslesen - wenn die Datei ein BOM hat (was man nicht weiss).
    Also wenn ein BOM drinne ist, dann geht sowas:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Module modMain
    3. Public Sub Main(args As String())
    4. Dim hshUnvollst = New HashSet(Of String)(ReadFileRecords("..\..\Unvollstaendig.txt"))
    5. Dim encoding = ReadEncoding("..\..\Unvollstaendig.txt")
    6. Using wr = New StreamWriter("..\..\Ergaenzung.txt", append:=False, encoding)
    7. For Each record In ReadFileRecords("..\..\Vollstaendig.txt")
    8. If Not hshUnvollst.Contains(record) Then wr.WriteLine(record)
    9. Next
    10. End Using
    11. End Sub
    12. Private Function ReadEncoding(pth As String) As System.Text.Encoding
    13. Using rd = New StreamReader(pth, detectEncodingFromByteOrderMarks:=True)
    14. rd.ReadLine() ' mindestens 1 Zeichen muss gelesen sein
    15. Return rd.CurrentEncoding
    16. End Using
    17. End Function
    18. Private Iterator Function ReadFileRecords(pth As String) As IEnumerable(Of String)
    19. Dim record As New List(Of String)
    20. Using rd = New StreamReader(pth)
    21. Do
    22. Dim line = rd.ReadLine()
    23. If line Is Nothing Then Return
    24. record.Add(line)
    25. If line.Substring(3, 4) = "7202" Then
    26. Yield String.Join(CrLf, record) ' return die mehreren Zeilen des records zu einem String verschmolzen
    27. record.Clear()
    28. End If
    29. Loop
    30. End Using
    31. End Function
    32. End Module
    Wenn kein Bom drin ist, muss man raten :(
    @Eierlein stimmt irgendwie schon, interessanter Weise ist es so, das die "Originial-Datei" die Umlaute auch nicht korrekt anzeigt.
    Wenn ich diese jedoch in das Arzt Informationssystem einlese, sind die Umlaute korrekt.
    Ich hab aber gerade einen "Workarround" gefunden der funktioniert. Ist zwar für knapp 100 Dateien etwas langwierig aber besser als nichts ;)
    Wenn ich den Inhalt der Textdatei in Notepad++ von ANSI auf CP852 umschalte und mit C&P den kompletten Inhalt in eine leere Datei schreibe, ist diese UTF-8
    Diese kann ich dann mit dem Code von @ErfinderDesRades Mergen und den Inhalt der Ausgabedatei kopiere ich als Text in die Originaldatei zurück.
    Dann klappt der Import fehlerfrei mit den Umlauten.
    Nein! Doch! OHH!
    @Eierlein das ist mir bewusst, nur übernimmt er schon beim Read die Codierung nicht korrekt und beim schreiben ebenfalls.
    Egal was ich an Codierung einstelle, es ist hinterher nicht mehr importierbar. Weiß der Geier was der Konverter im Vorfeld für ein Mist baut.
    Nein! Doch! OHH!