Textdateien verschmelzen
Verfasst: 22.10.2022 21:22
Aus gegebenem Anlass poste ich hier mal ein allgemeines „Gerüst“ das zeigt, wie sich Textdateien miteinander verschmelzen lassen.
Nach dem Lesen der Variablen 'line1$' und 'line2$' kann deren Inhalt selbstverständlich geändert werden, bevor er in die Ausgabe-Datei geschrieben wird.
Nach dem Lesen der Variablen 'line1$' und 'line2$' kann deren Inhalt selbstverständlich geändert werden, bevor er in die Ausgabe-Datei geschrieben wird.
Code: Alles auswählen
; -- erfolgreich getestet mit PB 6.00
EnableExplicit
Procedure.i MergeTextFiles (inFile1$, inFile2$, outFile$)
; -- Zwei Textdateien zu einer neuen verschmelzen, indem aus
; beiden Dateien abwechselnd je eine Zeile genommen wird.
; in : inFile1$, inFile2$: Namen der beiden Eingabe-Dateien;
; Format UTF-8 mit oder ohne BOM.
; outFile$ : Name der zu erzeugenden Ausgabe-Datei;
; Sie wird das Format UTF-8 ohne BOM haben.
; out: Funktionswert: 0 bei Fehler, 1 bei Erfolg
Protected.i ifn1, ifn2, remaining, ofn, fmt
Protected line1$, line2$
; -- Alle beteiligten Dateien öffnen und Eingabe-Formate prüfen.
ifn1 = ReadFile(#PB_Any, inFile1$)
If ifn1 = 0
ProcedureReturn 0
EndIf
fmt = ReadStringFormat(ifn1)
If fmt <> #PB_Ascii And fmt <> #PB_UTF8
CloseFile(ifn1)
ProcedureReturn 0
EndIf
ifn2 = ReadFile(#PB_Any, inFile2$)
If ifn2 = 0
CloseFile(ifn1)
ProcedureReturn 0
EndIf
fmt = ReadStringFormat(ifn2)
If fmt <> #PB_Ascii And fmt <> #PB_UTF8
CloseFile(ifn1)
CloseFile(ifn2)
ProcedureReturn 0
EndIf
ofn = CreateFile(#PB_Any, outFile$)
If ofn = 0
CloseFile(ifn1)
CloseFile(ifn2)
ProcedureReturn 0
EndIf
; -- Schleife, solange beide Eingabe-Dateien noch nicht zu Ende gelesen sind.
remaining = 0
Repeat
If Eof(ifn1)
remaining = ifn2
Break
ElseIf Eof(ifn2)
remaining = ifn1
Break
Else
line1$ = ReadString(ifn1)
line2$ = ReadString(ifn2)
WriteStringN(ofn, line1$)
WriteStringN(ofn, line2$)
EndIf
ForEver
; -- Eine Eingabe-Datei ist zu Ende gelesen.
; Falls in der anderen noch Zeilen übrig sind, auch diese in die Ausgabe-Datei schreiben.
If remaining = ifn1
While Eof(ifn1) = #False
line1$ = ReadString(ifn1)
WriteStringN(ofn, line1$)
Wend
ElseIf remaining = ifn2
While Eof(ifn2) = #False
line2$ = ReadString(ifn2)
WriteStringN(ofn, line2$)
Wend
EndIf
; -- Alle beteiligten Dateien schließen und Code für Erfolg zurückgeben.
CloseFile(ifn1)
CloseFile(ifn2)
CloseFile(ofn)
ProcedureReturn 1
EndProcedure
; -- Demo
Define path$, inFile1$, inFile2$, outFile$
path$ = "C:\Users\Nino\Desktop\"
inFile1$ = path$ + "Liste1.txt"
inFile2$ = path$ + "Liste2.txt"
outFile$ = path$ + "Liste_gesamt.txt"
If MergeTextFiles(inFile1$, inFile2$, outFile$)
Debug "Erfolg, s. Datei '" + outFile$ + "'"
Else
Debug "Fehler"
EndIf