Notepad++ / in STEP-Datei zeilenweise suchen und ersetzten mit RegEx

sieden

Newbie
Registriert
März 2006
Beiträge
7
Hallo,

ich benötige dringend Eure Hilfe bei einem lästigen Problem.

Eine STEP Datei (aus CAD) enthält am Anfang viele Textzeilen wie diese hier;

#122108=PRODUCT('Zylinderschraube_System_FS','M20x60','DIN 912',(#2)) ;

Syntax ist immer '#Zahl=PRODUCT('Text','Text','Text',(#2)) ;

Frage: Ist es möglich mit der in Notepad++ Suchen & Ersetzen Funktion

a) alle Zeilen, welche dieser Syntax entsprechen zu finden
und
b) diese Zeilen dann so zu ändern, dass die Werte innerhalb der letzten beiden
Hochkommas gelöscht werden

Beispiel:
#122108=PRODUCT('Zylinderschraube_System_FS','','',(#2)) ;

Danke im Vorraus
 
sieden schrieb:
#122108=PRODUCT('Zylinderschraube_System_FS','M20x60','DIN 912',(#2)) ;

In Perl ist das relativ einfach, kannst Du gleich auf der Kommandozeile machen:
Code:
perl -i.bak -F',' -lane 'if(/^#\d+=/m){$F[1]=~s/[\w ]+//g; $F[2]=~s/[\w ]+//g} print join",",@F' text.txt
Das geht so in einer #bash unter Windows oder gleich im Linux Subsystem for Windows. Ich versuche das jetzt mal in Notepad++, aber vielleicht bist Du mit diesen Infos schneller, da ich mich mit Notepad++ nicht so gut auskenne.

OK, erster Versuch:
notepadreg.jpg
 
Zuletzt bearbeitet:
Hallo

vielen Dank für die schnelle Antwort. Ich habe die Eingaben im NP++ übernommen jedoch ohne Erfolg.
Ich möchte das noch einmal etwas präziser darstellen;

step.jpg

Über die Funktion Suchen/Ersetzen soll NP++ diejenigen Zeilen finden, welche genau folgender Syntax entsprechen: #Zahl=PRODUCT('Text1','Text2','Text3',(#2) ); Bspl.
#27=PRODUCT('02_00_00_BEWEGTE_SEITE__','freigegeben','defin',(#2)) ;

Text1 ist immer vorhanden / Text2 und Text3 manchmal

Die Zeilen sind dann so zu editieren, dass Text2 und Text3 rausgelöscht werden und die Zeile dann wie folgt aussieht;

#27=PRODUCT('02_00_00_BEWEGTE_SEITE__','','',(#2)) ;

step_a.jpg

Das Dilemma ist eigentlich die Importschnittstelle unserer CAD Software. Diese interpretiert nicht Text1 als den Namen einer Baugruppe/ Teiles, sondern immer Text2.
Bisher öffne ich die Step Daten (im Schnitt 400 MB) im NP++ und lösche Text2 und Tex3 soweit vorhanden von Hand heraus.
Der Zeitaufwand ist enorm und die Fehlerquote natürlich auch.

Grüße Sieden
 
Bei mir gings mit Deinem Beispiel zumindest. Hänge doch bitte mal so eine Datei an.
 
Yep, jetzt funzt es. War Schreibfehler von mir * mit " vertauscht :rolleyes:

Ab Zeile 105 -#2=PRODUCT_CONTEXT... ändert dieses Verfahren auch die Zeileninhalte - darf es aber nicht.

Wirklich nur die Zeilen, welche am Anfang mit #Zahl=PRODUCT('Text1','Text2','Text3',(#2) ); beginnen
sollen geändert werden.

Kann das als Bedingung in den String: ^(#\d+=[^,]+),[^,]+,[^,]+,(.*?)$ mit eingebaut werden?

Und erst einmal großen, großen Dank an Dich.

Wenn das final so klappt bin ich -sozusagen über Nacht- einen riesen Schritt weiter gekommen.....

vorher-nachher.jpg
 
sieden schrieb:
Ab Zeile 105 -#2=PRODUCT_CONTEXT... ändert dieses Verfahren auch die Zeileninhalte - darf es aber nicht.

Wirklich nur die Zeilen, welche am Anfang mit #Zahl=PRODUCT('Text1','Text2','Text3',(#2) ); beginnen
sollen geändert werden.

Kann das als Bedingung in den String: ^(#\d+=[^,]+),[^,]+,[^,]+,(.*?)$ mit eingebaut werden?

Aha. Versuch mal bitte:

^(#\d+=PRODUCT\(([^,]+),[^,]+,[^,]+,(.*?)$

also die Klammer hinter PRODUCT als \(
 
Hammer - das ist es. Durchlauf und Reimport ins CAD war erfolgreich.Der Tag ist gerettet....

Darf ich noch ne Frage stellen?

Solche Syntax #162278=PRODUCT('O-Ring_HZ','7 x 2,5','WESTRING',(#2)) ; wird nicht gewandelt.

Liegt das an den Freizeichen oder Komma im Bereich TEXT2?
 
sieden schrieb:
Solche Syntax #162278=PRODUCT('O-Ring_HZ','7 x 2,5','WESTRING',(#2)) ; wird nicht gewandelt.

Liegt das an den Freizeichen oder Komma im Bereich TEXT2?

Das liegt am Komma von 2,5, da der Ausdruck nach Kommas als "Feldtrenner" sucht.
 
Versuch mal bitte so:
notepadreg2.jpg
 
Also mehr DeLuxe geht nich mehr.

Ich habe gerade eine 200MB große STEP Datei in NP++ eingeladen,
Eingaben aus dem letzten Screenshot gesetzt und keine 5 sec. später =>> ich habe fertig<<==.

Das sind knapp 3.2 Millionen Zeilen Quellcode von denen aber nur die ersten 360 für die Änderung relevant sind.

Trotzdem -> Grandios, da hab ich vorher locker 45min zugebracht.

Du bist mein Held.....:schluck:
 
Zurück
Oben