Zeichenketten aus 2 Dateien in eine Zeile einer Neuen schreiben
Hallo Zusammen,
ich habe jetzt schon eine Weile selber mit FOR-Schleifen gebastelt, komme aber irgendwie auf keinen grünen Zweig. Vielleicht könnt ihr mir ja helfen.
Ich habe folgende Ausgangssituation. Es existieren zwei .txt-Dateien die zum Beispiel so aussehen:
test1.txt
test2.txt
Als Ergebnis hätte ich gerne, dass die Zahlenfolge ab Zeile 3 der test2.txt und die Zahlen ab Zeile 7 von test1.txt ausgelesen werden und jeweils in einer Zeile einer neuen Datei (z.B. gesamt.txt) zusammengefügt werden.
Die sollte dann so aussehen:
gesamt.txt
Schonmal vielen Dank im vorraus.
Johannes
test1.txt
3
Kd_Am
Kd_Cs
Kd_U
time = no
5
2.87e+001 6.56e+004 2.86e-001
2.33e+001 2.03e+001 1.46e-001
2.35e+001 2.17e+005 1.22e-001
2.78e+001 5.24e+002 1.45e-001
1.47e+001 1.56e+005 2.32e-001
test2.txt
8
pH DIC IS Al Ca Am Cs U
7.12 97.22 128.17 7.49 74.01 2.21e-011 4.08e-006 1.16e-013
7.93 226.45 229.33 5.11 63.22 3.33e-008 0.02 0.00
7.39 180.75 212.33 1.56 23.80 0.00 1.36e-009 3.15e-005
7.01 255.50 182.97 0.64 48.82 2.21e-014 0.00 9.88e-010
7.614 161.72 348.16 0.38 106.91 4.27e-007 3.189e-013 1.77e-006
Als Ergebnis hätte ich gerne, dass die Zahlenfolge ab Zeile 3 der test2.txt und die Zahlen ab Zeile 7 von test1.txt ausgelesen werden und jeweils in einer Zeile einer neuen Datei (z.B. gesamt.txt) zusammengefügt werden.
Die sollte dann so aussehen:
gesamt.txt
7.12 97.22 128.17 7.49 74.01 2.21e-011 4.08e-006 1.16e-013 2.87e+001 6.56e+004 2.86e-001
7.93 226.45 229.33 5.11 63.22 3.33e-008 0.02 0.00 2.33e+001 2.03e+001 1.46e-001
...
Schonmal vielen Dank im vorraus.
Johannes
Please also mark the comments that contributed to the solution of the article
Content-Key: 161955
Url: https://administrator.de/contentid/161955
Printed on: April 26, 2024 at 08:04 o'clock
7 Comments
Latest comment
Vorausgesetzt du hast in beiden Dateien immer die Gleiche anzahl an Zahlenreihen dann würde es vom Prinzip her so gehen:
1. Auslesen wie viele Zeilen es sind -> findstr /n und zahl rausholen mit einer For schleife
2. Zeilenanzahl-2=Datensatzanzahl (Bei test2.txt)
3. Mit diesem konstrukt kannst du immer die gewünschte relevante zeile auslesen:
4. Jetzt wird das ganze verschachtelt. du zählst von 1 bis anzahl der datensätze durch, nimmst diese zählvariable - 1 als wert für skip und liest mit dem obigen Beispiel die test1.txt und test2.txt aus. Die Ergebnisse hänngst du zusammen und schreibst sie in gesamt.txt
Zu beachten ist:
a. der wert für skip muss halt den offset von 2 bzw. 6 aufaddiert bekommen und
b. skip=0 geht nicht (was ja nicht vorkommen sollte
1. Auslesen wie viele Zeilen es sind -> findstr /n und zahl rausholen mit einer For schleife
2. Zeilenanzahl-2=Datensatzanzahl (Bei test2.txt)
3. Mit diesem konstrukt kannst du immer die gewünschte relevante zeile auslesen:
set "x="
FOR /F "skip=2 delims=" %i in (test2.txt) do in not defined x set x=%%i
In x steht danach die 3. Zeile (durch das skip=2)FOR /F "skip=2 delims=" %i in (test2.txt) do in not defined x set x=%%i
4. Jetzt wird das ganze verschachtelt. du zählst von 1 bis anzahl der datensätze durch, nimmst diese zählvariable - 1 als wert für skip und liest mit dem obigen Beispiel die test1.txt und test2.txt aus. Die Ergebnisse hänngst du zusammen und schreibst sie in gesamt.txt
Zu beachten ist:
a. der wert für skip muss halt den offset von 2 bzw. 6 aufaddiert bekommen und
b. skip=0 geht nicht (was ja nicht vorkommen sollte
moin jschikora,
sofern keine Doppelpunkte am Zeilenanfang stehen könnte es so gehen.
Gruß Phil
sofern keine Doppelpunkte am Zeilenanfang stehen könnte es so gehen.
set "Datei1=D:\test1.txt"
set "Datei2=D:\test2.txt"
set "Sprung1=6"
set "Sprung2=2"
set "Ausgabe=D:\Ausgabe.txt"
type nul>"%Ausgabe%"
for /f "tokens=1* delims=:" %%i in ('more +%Sprung1% "%Datei1%"^|findstr /n "^"') do (
for /f "tokens=1* delims=:" %%k in ('more +%Sprung2% "%Datei2%"^|findstr /n "^"^|findstr /b "%%i:"') do >>"%Ausgabe%" echo %%j %%l
)
Gruß Phil
Jetzt mal vom drüber schauen her fällt mir folgendes auf:
- Den counter brauchst du eigentlich nicht, da die schleife sowieso aufhört wenn alle durch sind.
- Bei den beiden for schleifen zum auslesen der Dateien würde ich "skip=%a% delims=" benutzen damit die Leerzeichen nicht als trennzeichen benutzt werden
- Wenn du die eignetliche Funktion in eine Unterprozedur packst und in mit der for schleife in Zeile 5 per call aufrufst klappt das mit dem set /a, bzw. die auflösung der variabeln.
- Den counter brauchst du eigentlich nicht, da die schleife sowieso aufhört wenn alle durch sind.
- Bei den beiden for schleifen zum auslesen der Dateien würde ich "skip=%a% delims=" benutzen damit die Leerzeichen nicht als trennzeichen benutzt werden
- Wenn du die eignetliche Funktion in eine Unterprozedur packst und in mit der for schleife in Zeile 5 per call aufrufst klappt das mit dem set /a, bzw. die auflösung der variabeln.