Maschinenprogramme per bat zusammenfügen
Ich stehe vor der Herausforderung mehrere Maschinenprogramme (Textdateien im Format .ngc) zusammen führen zu wollen.
Die Herausforderung ist aber, dass aus jeder Datei bestimmte einzelne Zeilen aber auch ganze Zeilenblöcke kopiert werden sollen. Dabei ist die Sortierung wichtig, denn diese bestimmt den Programmablauf an der Maschine. Glücklicherweise sehen die einzelne Dateien an Anfang und Ende gleich aus.
Die Dateinamen sehen wie folgt aus:
Der Maschinencode beginnt und endet folgendermaßen:
Gewünschtes Zielformat soll sein:
Oder um es noch einfacher zu beschreiben:
Die Herausforderung ist aber, dass aus jeder Datei bestimmte einzelne Zeilen aber auch ganze Zeilenblöcke kopiert werden sollen. Dabei ist die Sortierung wichtig, denn diese bestimmt den Programmablauf an der Maschine. Glücklicherweise sehen die einzelne Dateien an Anfang und Ende gleich aus.
Die Dateinamen sehen wie folgt aus:
Setupname_1.ngc
Setupname_2.ngc
...
Setupname_n.ngc
Der Maschinencode beginnt und endet folgendermaßen:
%
(Setupname_1)
(WERKZEUGBESCHREIBUNG) z.B.: (T2 D=8. CR=1. - ZMIN=-3.834 - BULLNOSE END MILL)
...viel Maschinencode...
M30
%
Gewünschtes Zielformat soll sein:
%
(Setupname_1)
(WERKZEUGBESCHREIBUNG 1)
(WERKZEUGBESCHREIBUNG 2)
(WERKZEUGBESCHREIBUNG ...)
(WERKZEUGBESCHREIBUNG n)
Maschinencode_1
Maschinencode_2
Maschinencode_...
Maschinencode_n
M30
%
Oder um es noch einfacher zu beschreiben:
Zeile 1 aus der Setupname_1.ngc
Zeile 2 aus der Setupname_1.ngc
Zeile 3 aus der Setupname_1.ngc
Zeile 3 aus der Setupname_2.ngc
Zeile 3 aus der Setupname_....ngc
Zeile 3 aus der Setupname_n.ngc
Zeile 4 bis (letzte Zeile - 2) aus der Setupname_1.ngc
Zeile 4 bis (letzte Zeile - 2) aus der Setupname_2.ngc
Zeile 4 bis (letzte Zeile - 2) aus der Setupname_....ngc
Zeile 4 bis (letzte Zeile - 2) aus der Setupname_n.ngc
M30
%
Please also mark the comments that contributed to the solution of the article
Content-ID: 83201433713
Url: https://administrator.de/contentid/83201433713
Printed on: October 7, 2024 at 23:10 o'clock
7 Comments
Latest comment
Auch kein Hallo.
Mit der Powershell etwa so:
Zum Ausführen in einer Batch kannst du dann das nutzen
Pure Batch geht auch, aber wert macht das noch ? 🙃
Gruß Katrin
Mit der Powershell etwa so:
<# Scriptdatei "merge.ps1"#>
# Ordner mit *.ngc Dateien
$folder = 'D:\Daten'
# Pfad für Ausgabedatei
$fileout = 'D:\merged.ngc'
# Dateien auflisten
$files = Get-ChildItem $folder -File -Filter *.ngc | sort {[int][regex]::match($_.Basename,'\d+$').Value}
# erste zwei Zeilen hinzufügen
$data = Get-Content $files[0].Fullname -TotalCount 2
# Werkzeugbeschreibungen aus jeder Datei hinzufügen
$data += foreach($file in $files){
(Get-Content $file.Fullname -TotalCount 3)[-1]
}
# Maschinen-Codes jeder Datei hinzufügen
$data += foreach($file in $files){
$content = Get-Content $file.Fullname
$content[3..($content.Count-3)]
}
# Abschlusszeilen hinzufügen
$data += Get-Content $files[0].Fullname -Tail 2
# Ergebnis in Datei schreiben
$data | Set-Content $fileout
Zum Ausführen in einer Batch kannst du dann das nutzen
powershell -EP Bypass -File "D:\Scripte\merge.ps1"
Pure Batch geht auch, aber wert macht das noch ? 🙃
@echo off
set "ordner=D:\Ordner"
set "outfile=D:\merged.ngc"
>"%outfile%" (
echo %%
echo ^(setupname_1^)
for %%a in ("%ordner%\*.ngc") do (
for /f "tokens=1,* delims=:" %%b in ('findstr /n "^" "%%a"') do if "%%b" == "3" echo.%%c
)
for %%a in ("%ordner%\*.ngc") do (
more +3 "%%a" | findstr /iv "^M30$" | findstr /v "^%%$"
)
echo M30
echo %%
)
Wenn es das denn nun war bitte nicht vergessen deinen Thread hier dann auch als gelöst zu markieren!