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

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

Printed on: June 15, 2024 at 23:06 o'clock

Member: aqui
aqui Nov 29, 2023 updated at 11:37:48 (UTC)
Goto Top
Linux BASH, ZSH oder welche Shell darf es sein oder ist das egal?! face-sad
Member: dbru61
dbru61 Nov 29, 2023 at 11:51:35 (UTC)
Goto Top
Ich schmeiße mal Perl ins Rennen...
Mitglied: 8030021182
Solution 8030021182 Nov 29, 2023 updated at 13:29:16 (UTC)
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
Member: SlainteMhath
SlainteMhath Nov 29, 2023 at 12:54:26 (UTC)
Goto Top
welche Shell darf es sein
Steht doch da: bat!
forfile (%a.... ne sorry, bin raus 
SCNR face-smile
Member: Chrischan183
Chrischan183 Dec 02, 2023 at 06:41:31 (UTC)
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.
Member: aqui
aqui Dec 11, 2023 at 16:56:40 (UTC)
Goto Top
Wenn es das denn nun war bitte nicht vergessen deinen Thread hier dann auch als gelöst zu markieren!
Member: Chrischan183
Chrischan183 Dec 15, 2023 at 21:14:22 (UTC)
Goto Top
Moin an alle
nun habe ich es geschafft mal das Skript zu testen.
Es scheint perfekt zu funktionieren. Vielen Dank dafür.