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-Key: 232107

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: BirdyB
BirdyB Mar 08, 2014 at 18:50:56 (UTC)
Goto Top
Hallo BustedDice,

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

Gruß

Berthold
Member: bastla
bastla Mar 08, 2014 updated at 18:53:40 (UTC)
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
Member: BustedDice
BustedDice Mar 08, 2014 at 19:04:59 (UTC)
Goto Top
Danke an bastla alles bestens! Wie mach ich das wenn noch eine 3 und 4 input.txt dazu kommt?
Member: bastla
bastla Mar 08, 2014 updated at 19:07:11 (UTC)
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
Member: BustedDice
BustedDice Mar 08, 2014 at 19:26:13 (UTC)
Goto Top
Mit VBS hab ich noch nicht viel Erfahrung...
Member: bastla
bastla Mar 08, 2014 updated at 20:10:49 (UTC)
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]
Member: BustedDice
BustedDice Mar 08, 2014 at 20:07:28 (UTC)
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
Member: bastla
bastla Mar 08, 2014 at 20:12:32 (UTC)
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
Member: BustedDice
BustedDice Mar 08, 2014 at 20:19:32 (UTC)
Goto Top
Tausend Dank für die Hilfe besser gehts nicht ;)