b-real
Goto Top

Mit Batch eine Datei nach Vorgabe sortieren (Stellen 1-2 je Zeile)

Hallo Community,

mir wurde hier schon oft geholfen, ich bin kein Batch Profi aber ich habe hier auch schon viel gelernt. Daher hoffe ich auf eure Hilfe ob soetwas machbar ist.

Und zwar geht es um eine Datei eines Konverters, die immer einen fix vorgegeben Namen hat: O2LLANDES_SORT. In dieser Datei gibt es mehrere Satzarten, die immer an der Stelle 1 und 2 in jeder Zeile definiert werden.

Es können nur die folgenden Satzarten vorkommen, aber auch mehrmals in der Datei. Es müssen nicht alle vorkommen. Diese Reihenfolge ist gewünscht für die Sortierung:
01
31
43
42
46
69
98


Hinweis: Die Satzart 01 steht für Start und steht immer an erster Stelle. Die Satzart 98 steht für Ende und ist immer an letzter Stelle. Beide können nur einmal in der Datei vorkommen.

Beispiel wie die Datei jetzt aussieht:
01LAGERD       141111
3100200298279697          690066901000055225091200206951384329143457     15111500000078             LD          LE 197001010000000018052984
3100200298279697          690066901000055294091200206951384329143457     15111500000078             LD          LE 197001010000000018052983
3100200298279697          690066901000055270091200206951384329143457     15111500000078             LD          LE 197001010000000018052982
3100200298279697          690066901000055263091200206951384329143457     15111500000078             LD          LE 197001010000000018052981
3100200298279697          690066901000055249091200206951384329143457     15111500000078             LD          LE 197001010000000018052979
439257250000100000195000+ 1411502274     89755           LD      2014111115725               201411110000020000000000
42925725 2014111115725               20141111069740
46925725000011796385489755           1411502274     00000550
46925725000011796385389755           1411502274     00001400
690029257250000189755           1411502274     0697402014111115725               20141111000001950000002LD
439257250000200000260000+ 1411502275     94552           LD      2014111115725               201411110000040000000000
46925725000021796385794552           1411502275     00000700
46925725000021796385594552           1411502275     00000700
46925725000021796385694552           1411502275     00000700
46925725000021796386692556           1411502275     00000500
690029257250000294552           1411502275     0697402014111115725               20141111000002600000004LD
98LAGERD       141111

So sollte die Datei NACH der Sortierung aussehen:
01LAGERD       141111
3100200298279697          690066901000055225091200206951384329143457     15111500000078             LD          LE 197001010000000018052984
3100200298279697          690066901000055294091200206951384329143457     15111500000078             LD          LE 197001010000000018052983
3100200298279697          690066901000055270091200206951384329143457     15111500000078             LD          LE 197001010000000018052982
3100200298279697          690066901000055263091200206951384329143457     15111500000078             LD          LE 197001010000000018052981
3100200298279697          690066901000055249091200206951384329143457     15111500000078             LD          LE 197001010000000018052979
439257250000100000195000+ 1411502274     89755           LD      2014111115725               201411110000020000000000
439257250000200000260000+ 1411502275     94552           LD      2014111115725               201411110000040000000000
42925725 2014111115725               20141111069740
46925725000011796385489755           1411502274     00000550
46925725000011796385389755           1411502274     00001400
46925725000021796385794552           1411502275     00000700
46925725000021796385594552           1411502275     00000700
46925725000021796385694552           1411502275     00000700
46925725000021796386692556           1411502275     00000500
690029257250000189755           1411502274     0697402014111115725               20141111000001950000002LD
690029257250000294552           1411502275     0697402014111115725               20141111000002600000004LD
98LAGERD       141111



Lässt sich soetwas mit Batch vernünftig lösen?

Vielen Dank für eure Hilfe schon mal.

Content-ID: 256474

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

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

riddler2kone
riddler2kone 02.12.2014 aktualisiert um 11:53:53 Uhr
Goto Top
Keine Antwort auf deine Frage, aber ein genereller Tipp:

Ich würde dir empfehlen, bei solchen Aufgaben auf Python zurückzugreifen. Python ist eine sehr mächtige Skriptsprache, sehr einfach zu lernen und kommt aus genau diesem Bereich (Serveradministration).
Gersen
Lösung Gersen 02.12.2014 aktualisiert um 13:36:17 Uhr
Goto Top
Hallo,

per Batch:
sort Eingabedatei /O Ausgabedatei

Edit: Sorry, nicht gelesen, dass "43" vor "42" kommen soll...

Dann wäre es wohl:
@echo off
for %%a in (01,31,43,42,46,69,98) do (findstr /B /C:%%a Eingabedatei >> Ausgabedatei)

Gruß,
Gersen
B-Real
B-Real 02.12.2014 um 12:54:46 Uhr
Goto Top
Danke für die Tipps, ich werde das versuchen und melde mich dann ob es geklappt hat.
B-Real
B-Real 02.12.2014 um 13:37:35 Uhr
Goto Top
Dein Skript funktioniert perfekt Gersen, vielen Dank! Ich dachte nicht, dass es sich mit einem Einzeiler so schnell machen lässt face-smile. Ist somit als gelöst markiert.