busteddice
Goto Top

Mit Batch zwei Textfiles in einem zusammenfügen

Hallo zusammen brauch eure Hilfe bei einem Batch.
Habe zwei .txt Dateien die ich in eine .txt zusammen fügen will.
Hoffe mir kann jemand weiter helfen....

z.b
input1
input1.txt

Inhalt der input1.txt

Name1
Name2
Name3
Name4
...
input2
input2.txt

Inhalt der input2.txt

Bezeichnung1
Bezeichnung2
Bezeichnung3
Bezeichnung4
...
output-aus-1+2
output-aus-1+2.txt

Inhalt der output-aus-1+2.txt

Name1
Bezeichnung1
Name2
Bezeichnung2
Name3
Bezeichnung3
Name4
Bezeichnung4
...

Content-ID: 232107

Url: https://administrator.de/contentid/232107

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

BirdyB
BirdyB 08.03.2014 um 19:50:56 Uhr
Goto Top
Hallo BustedDice,

es sollen also immer alternierend die Zeilen aus der einen bzw. der anderen Batch ausgelesen werden?

Gruß

Berthold
bastla
bastla 08.03.2014 aktualisiert um 19:53:40 Uhr
Goto Top
Hallo BustedDice!

Soferne keine Leerzeilen zu berücksichtigen sind, etwa so:
@echo off & setlocal
set "Ein1=input1.txt"  
set "Ein2=input2.txt"  
set "Aus=output-aus-1+2.txt"  

del "%Aus%" 2>nul  
(for /f "usebackq delims=" %%i in ("%Ein1%") do (  
    set "Zeile1=%%i"  
    set "Zeile2="  
    set /p Zeile2="  
    setlocal enabledelayedexpansion
    >>"%Aus%" echo(!Zeile1!  
    >>"%Aus%" echo(!Zeile2!  
    endlocal
))<"%Ein2%  
Grüße
bastla
BustedDice
BustedDice 08.03.2014 um 20:04:59 Uhr
Goto Top
Danke an bastla alles bestens! Wie mach ich das wenn noch eine 3 und 4 input.txt dazu kommt?
bastla
bastla 08.03.2014 aktualisiert um 20:07:11 Uhr
Goto Top
Hallo BustedDice!
Wie mach ich das wenn noch eine 3 und 4 input.txt dazu kommt?
Mit VBS ... face-wink

Grüße
bastla
BustedDice
BustedDice 08.03.2014 um 20:26:13 Uhr
Goto Top
Mit VBS hab ich noch nicht viel Erfahrung...
bastla
bastla 08.03.2014 aktualisiert um 21:10:49 Uhr
Goto Top
Hallo BustedDice!
Mit VBS hab ich noch nicht viel Erfahrung...
Kann ja noch kommen ...

Für eine variable Anzahl von input-Dateien könnte das etwa so aussehen (anzupassen sind die Zeilen 1 und 2):
EinDateien = Array("D:\input1.txt", "D:\input2.txt", "D:\input3.txt", "D:\input4.txt")  
AusDatei = "D:\output.txt"  
Delim = vbNewline 'Feldtrennzeichen = Zeilenschaltung  
'Delim = ";" 'für CSV  

DatAnzahl = UBound(EinDateien) 'Anzahl Eingabedateien ermitteln  
Set fso = CreateObject("Scripting.FileSystemObject")  

MaxZeile = 0
For i = 0 To DatAnzahl 'Alle Eingabedateien durchgehen, ...  
    Z = Split(fso.OpenTextFile(EinDateien(i)).ReadAll, vbNewline) '... zeilenweise in Matrix einlesen und ...  
    If UBound(Z) > MaxZeile Then MaxZeile = UBound(Z) '... höchste Zeilenanzahl ermitteln.  
Next

ReDim A(MaxZeile, DatAnzahl) 'Matrix für alle Felder (lt Datei- und Zeilenanzahl) erstellen  

For Spalte = 0 To DatAnzahl 'Nochmals alles einlesen (je Datei entsteht eine Spalte) ...  
    Z = Split(fso.OpenTextFile(EinDateien(Spalte)).ReadAll, vbNewline)
    For Zeile = 0 To UBound(Z) '... und feldweise ...  
        A(Zeile, Spalte) = Z(Zeile) ' ... in A-Matrix übertragen.  
    Next
Next

Set Aus = fso.CreateTextFile(AusDatei)
For Zeile = 0 To MaxZeile 'Alle Felder (= Zeilen)...  
    For Spalte = 0 To DatAnzahl '... aller Dateien (= Spalten) ...  
        If Spalte <> DatAnzahl Then
            Aus.Write A(Zeile, Spalte) & Delim '... getrennt in Ausgabedatei schreiben; ...  
        Else
            Aus.Write A(Zeile, Spalte) & vbNewLine '... nach dem letzten Feld jedenfalls Zeilenschaltung.  
        End If
    Next
Next
Das "Zusammenbauen" der Daten findet hier zunächst im Speicher (genauer: im 2-dimensionalen Array A) statt, wobei die Größe des Arrays bestimmt wird, indem vorweg alle Eingabedateien einmal gelesen und auf ihre Zeilenanzahl untersucht werden - daraus und aus der Anzahl der Eingabedateien ergeben sich die Dimensionen von A().

Im zweiten Schritt werden die Dateien der Reihe nach eingelesen, in Zeilen aufgeteilt und die Zeileninhalte dem jeweiligen Array-Element der Ausgabematrix zugeordnet.

Im letzten Schritt werden dann alle Elemente der Ausgabematrix zeilenweise in die Zieldatei geschrieben.

Grüße
bastla

[Edit] Für mehr Flexibilität Feldtrennzeichen hinzugefügt; durch Änderung des Trennzeichens auf ";" könnte zB eine CSV-Datei erzeugt werden [/Edit]

[Edit2] Fehler in Zeile 20 behoben [/Edit2]
BustedDice
BustedDice 08.03.2014 um 21:07:28 Uhr
Goto Top
Okay leider funktioniert es nicht ganz

input1
input1.txt

Inhalt der input1.txt

Name1
Name2
Name3
Name4
...
input2
input2.txt

Inhalt der input2.txt

Bezeichnung1
Bezeichnung2
Bezeichnung3
Bezeichnung4
...
input3
input3.txt

Inhalt der input3.txt

Größe1
Größe2
Größe3
Größe4
...
input4
input4.txt

Inhalt der input4.txt

Datum1
Datum2
Datum3
Datum4
...
output
output

Inhalt der output sieht aber leider so aus:

Name1
Bezeichnung1
Größe1
Datum1
Name1
Bezeichnung1
Größe1
Datum1
Name1
Bezeichnung1
Größe1
Datum1
bastla
bastla 08.03.2014 um 21:12:32 Uhr
Goto Top
Hallo BustedDice!

Hatte leider eine Veschlimmbesserung eingebaut, indem ich die Laufvariablen zunächst - wie üblich - mit i und j benannt, danach aber auf Zeile und Spalte (zur besseren Nachvollziehbarkeit) umbenannt (und im Fall der Zeile 20 leider einmal nicht) hatte - sollte jetzt passen ...

Grüße
bastla
BustedDice
BustedDice 08.03.2014 um 21:19:32 Uhr
Goto Top
Tausend Dank für die Hilfe besser gehts nicht ;)