bobby0712
Goto Top

Batch um Zeichen aus erster und letzter Zeile einer TXT Datei zu löschen

Hallo.
Wie der Titel schon sagt suche ich eine möglichkeit wie ich aus einer TXT Datei aus der ersten Zeile ein "-" (Bindestrich) entfernen kann. Der Rest der TXT Datei soll dabei nicht betrachtet werden. Nur die letzte Zeile wieder. Es geht um ein CNC Programm das sonst nicht von der Steuerung erkannt wird.
Bsp:

0 BEGIN PGM 0001-AT MM
1 FN 1: Q1 = +Q1 + +4
2 * - NUTENSTEIN-MS
3 CALL LBL 100
4 BLK FORM 0.1 Z X-1 Y-11 Z-20
5 BLK FORM 0.2 X+21 Y+1 Z+1
...
...
171 CYCL DEF 7.1 IX+1
172 CYCL DEF 7.2 IY-1
173 CYCL DEF 7.3 IZ+19,7
174 LBL 0
175 END PGM 0001-ATM

Also aus der ersten Zeile muss das Minus oder Bindestrich weg und aus der letzten Zeile ebenfalls.
Die Zeilen dazwischen natürlich nicht, denn das sind ja meine Koordinaten für die Bauteile.

Ich hoffe dass ihr mir helfen könnt. 2000 Programme von Hand ändern wäre sehr ärgerlich.....


Viele Grüße Daniel

Content-Key: 252653

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

Printed on: April 16, 2024 at 20:04 o'clock

Member: TsukiSan
TsukiSan Oct 21, 2014 updated at 17:08:29 (UTC)
Goto Top
Hallo Bobby0712,

wenn es VBS sein darf, meinst du es in etwa so:
Ein = "D:\CNC mit Datei.cnc"  
Aus = "D:\CNC ohne Datei.cnc"  

Von = "-AT"  
Nach = " AT"  

Set fso = CreateObject("Scripting.FileSystemObject")  
fso.CreateTextFile(Aus).Write Replace(fso.OpenTextFile(Ein).ReadAll, Von, Nach)

msgbox "Fertig"  

Wenn dem so geht, dann mit einer Schleife halt alle Dateien in deinem Ordner entsprechend bearbeiten.
Gruss

Tsuki
Member: rubberman
rubberman Oct 21, 2014 at 17:06:27 (UTC)
Goto Top
Hallo Bobby0712, willkommen im Forum.

Als Batchcode etwa so (ungetestet):
@echo off &setlocal 
set "file=C:\datei.ext"  
set "tmpfile=%temp%\file.tmp"   
 
setlocal EnableDelayedExpansion
for /f %%i in ('type "!file!"^|find /c /v ""') do set /a "count = %%i - 2"  
<"!file!" >"!tmpfile!" (  
  set "line=" &set /p "line="  
  echo(!line:-=!
  for /l %%j in (1 1 %count%) do (
    set "line=" &set /p "line="  
    echo(!line!
  )
  set "line=" &set /p "line="  
  echo(!line:-=!
)
move "!tmpfile!" "!file!"  
Der Code (wenn er denn für dich funktioniert) ließe sich auch erweitern, dass er alle Dateien eines Verzeichnisses verarbeitet.

Grüße
rubberman
Member: 4everalive
4everalive Jan 30, 2020 at 15:06:33 (UTC)
Goto Top
Hallo rubberman,

ich weiß es ist schon eine weile her, dass dieses Thema behandelt wurde, aber vielleicht kannst du mir trotzdem helfen.

Ich brauche einen ähnlichen Batchcode wie dieser, allerdings möchte ich mehrere Dateien in einem Ordner bearbeiten und muss nur das aller erste Zeichen in der jeweiligen txt Datei löschen. Dieses ist allerdings ein Sonderzeichen.

Hier ist ein Beispiel:

%
:0010
G99G40G25
G0
M25
T2000


Es muss also nur diese 4-Eck entfernt werden und das bei ca 10000 Dateien face-smile Händisch ist das ganz schon viel Arbeit, aber vielleicht kannst du mir bei diesem Problem weiterhelfen, da ich selbst nicht ganz so viel Ahnung habe.

Vielen Dank

Gruß
4everalive
Member: rubberman
rubberman Jan 31, 2020 at 19:53:20 (UTC)
Goto Top
Dieses Viereck kann ein einzelnes Zeichen sein, muss aber nicht. Kommt drauf an in welchem Charset der Text vorliegt. Also öffne die Datei mal in einem HEX Editor und schreib mal runter, welche Bytes vor dem % Zeichen (HEX Code 25) stehen. BTW Sollte die Datei mehr Binärdaten enthalten und nicht ausschließlich Text, dann ist Batch von vorn herein ungeeignet den Inhalt zu verarbeiten.

Steffen
Member: 4everalive
4everalive Feb 04, 2020 at 13:28:10 (UTC)
Goto Top
Hallo Steffen,

Ich hab eine einfache Datei mal in einem Hex-Editor geöffnet und ich hab das Ergebnis mal als Bild angehängt.
Hilft dir das weiter?

Vielen Dank auf jeden Fall
hex-editor
Mitglied: 142232
142232 Feb 04, 2020 updated at 14:49:19 (UTC)
Goto Top
Zitat von @4everalive:

Hallo Steffen,

Ich hab eine einfache Datei mal in einem Hex-Editor geöffnet und ich hab das Ergebnis mal als Bild angehängt.
Hilft dir das weiter?

Vielen Dank auf jeden Fall

Moin
@echo off
set "ordner=D:\test"  
powershell -EP ByPass -NoP -C "gci '%ordner%' -File | %%{[regex]::replace((gc $_.Fullname -raw),'^\x12','') | sc $_.Fullname}"  
Ciao.
Member: 4everalive
4everalive Feb 13, 2020 at 07:37:35 (UTC)
Goto Top
Hey

Sorry für die späte Antwort, aber es hat einwandfrei funktioniert.

Vielen Dank

Gruß
Member: 4everalive
4everalive Feb 20, 2020 at 11:54:53 (UTC)
Goto Top
Hallo zusammen,

So jetzt wo ich Zeit hatte das ganze noch weiter zu testen, bin ich leider immer noch nicht am Ziel und nach längerem probieren komme ich alleine auch nicht weiter und brauche nochmal Hilfe.

Ich habe immer noch die gleiche Datei. Damit sie aber auf der CNC Maschine erkannt wird muss ich jetzt noch den ":" durch ein "O" ersetzen.

In dem Bild von der HEX Datei ist dieser ganz oben vor der Nummer "1005"


Kann mir hiermit nochmal jemand helfen?

Vielen Dank im schon mal.