chrischan183
Goto Top

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:
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
%

Content-ID: 83201433713

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

Ausgedruckt am: 13.11.2024 um 12:11 Uhr

aqui
aqui 29.11.2023 aktualisiert um 12:37:48 Uhr
Goto Top
Linux BASH, ZSH oder welche Shell darf es sein oder ist das egal?! face-sad
dbru61
dbru61 29.11.2023 um 12:51:35 Uhr
Goto Top
Ich schmeiße mal Perl ins Rennen...
8030021182
Lösung 8030021182 29.11.2023 aktualisiert um 14:29:16 Uhr
Goto Top
Auch kein Hallo.
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 %%
)
Gruß Katrin
SlainteMhath
SlainteMhath 29.11.2023 um 13:54:26 Uhr
Goto Top
welche Shell darf es sein
Steht doch da: bat!
forfile (%a.... ne sorry, bin raus 
SCNR face-smile
Chrischan183
Chrischan183 02.12.2023 um 07:41:31 Uhr
Goto Top
Hallo an alle

Ich möchte mich für die Unhöflichkeit der fehlenden Begrüßung entschuldigen.

Umso mehr freue ich mich, dass so viele Meldungen bereits kamen.
Ich habe ein paar Jahre eine PDM/PLM System nebenher administriert, daher sind mir Batches noch ein Begriff. Aber ich bin eben nicht übermäßig firm in der Programmierung dieser.

Mit Powershell habe ich bisher noch keine Kontaktpunkte.

@8030021182
Ich werde das mal in Ruhe studieren und testen und mich melden.
aqui
aqui 11.12.2023 um 17:56:40 Uhr
Goto Top
Wenn es das denn nun war bitte nicht vergessen deinen Thread hier dann auch als gelöst zu markieren!
Chrischan183
Chrischan183 15.12.2023 um 22:14:22 Uhr
Goto Top
Moin an alle
nun habe ich es geschafft mal das Skript zu testen.
Es scheint perfekt zu funktionieren. Vielen Dank dafür.