Verwendung von erweiterten Auslösern

Der folgende Abschnitt enthält Informationen über die Anwendung von erweiterten Auslösern für das Auslesen von Programmnamen in CIMCO DNC-Max. Das Auslesen von Kommentaren in NC-Base geschieht in gleicher Weise.

Der folgende Abschnitt enthält Informationen, die nur für fortgeschrittene Anwender von Interesse sind. Wenn Sie intelligente Auslöser weder anwenden noch verstehen müssen, können Sie diesen Abschnitt überspringen.

Die intelligenten Auslöser von NC-Base sind eine modifizierte Ausgabe der sogenannten regular expressions. Dabei handelt es sich um ein mächtiges Suchwerkzeug für Zeichenketten.

Das folgende Beispiel zeigt, wie intelligente Auslöser verwendet werden können. Nehmen wir an, wir haben ein ISO NC-Programm mit Zeilennummern im Format N2010 am Anfang jeder Zeile. Der Postprozessor hat bei der Erzeugung der Datei jedoch eine Reihe von Kommentarzeilen am Anfang der Datei ohne Blocknummern eingefügt. Wenn Sie sicher stellen wollen, dass diese Zeilen nicht an die CNC-Maschine gesendet werden, können Sie folgenden Start-Kode angeben:

Was das bedeutet?

ˆDer folgende Auslöser muss am Anfang jeder Zeile vorkommen
NSuche nache dem Zeichen N
[0-9]Jedes Zeichen zwischen 0 und 9
{1,4}Gilt für 1-4 des vorangegangenen Zeichens (0 - 9)

Mit anderen Worten: Beginne die Übertragung ab der ersten Zeile, die mit N gefolgt von 1 bis 4 Ziffern beginnt.

Ein umfassenderes Beispiel folgt am Ende dieses Abschnitts.

Übersicht der anerkannten Symbole

.Gilt für jedes einzelnes Zeichen
*0 oder mehr der vorangegegangenen Begriffe
+1 oder mehr der vorangegegangenen Begriffe
-Bereich
ˆSet negieren (inside set delimiters [])
{Anfang eines markierten Begriffs
}Ende eines markierten Begriffs
[Set-Anfang
]Set-Ende
?Vorheriger Begriff ist wahlfrei
|Vorheriger Begriff ODER nächster
ˆMit Zeilenanfang verankern
$Mit Zeilenende verankern
(Start eines Unterbegriffs
)Ende eines Unterbegriffs
<Start Extraktion
>Ende Extraktion

Wenn Sie ein besonderes Zeichen als Teil des gesuchten Textes eingeben möchten, stellen Sie ihm ein '\'-Zeichen voran.

Beispiele: Um '\' am Anfang einer Zeile zu finden, geben Sie ˆ\\ an.

Sets

Sets werden durch '[' und ']'-Symbole angegeben.

Beispiel: [abc] findet alle Vorkommnisse der Zeichen 'a', 'b' oder 'c'.

Sie können ein Set negieren, indem Sie 'ˆ' als erstes Zeichen in dem Set angeben.

Beispiel: [ˆabc] gilt für jedes Zeichen, dass nicht 'a', 'b' oder 'c' ist.

Bereiche

Bereiche werden durch das '-'-Symbol angegeben

Beispiel: [a-z][0-9] findet alle Zeichen von 'a' bis 'z' gefolgt durch eine Ziffer von '0' bis '9'.
Beispiel: [a-zA-Z0-9] findet jeden Buchstaben oder jede Ziffer.

Intervallausdrücke

Intervallausdrücke werden durch die Symbole '{' und '}' definiert.

Beispiel: [0-9]{1,4} findet 1-4 Ziffern.
Beispiel: [0-9]{3,} findet 3 oder mehr Ziffern.
Beispiel: [0-9]{4} findet genau 4 Ziffern.

Unterbegriffe extrahieren

Um Teile eine Begriffs zu finden, schließen Sie ihn in '<' und '>' ein.

Beispiel: Um die Programmnummer 1234 in der Zeichenkette PRG=1234 zu finden, geben Sie PRG=<[0-9]{4}> an.

Regular Expressions

Regular Expressions (RE) sind ein oder mehrere nicht leere Zweige, die durch '|' getrennt werden. Alles was auf irgendeinen der Zweige zutrifft, wird gefunden.

Ein Zweig besteht aus verknüpften Stücken. Er findet einmal für das erste, dann für das zweite, usw.

Ein Stück ist ein Atom, möglicherweise gefolgt von einem einzelnen '*', '+', ' ?' oder Satz. Ein Atom gefolgt von '*' findet eine Folge aus 0 oder mehr Treffern. Ein Atom gefolgt von '+' findet eine Folge aus 1 oder mehr Treffern. Ein Atom gefolgt von ' ?' findet eine Folge von 0 oder 1 Treffern.

Ein Satz besteht aus '{' gefolgt von einer unsignierten Dezimalinteger, mö£glicherweise gefolgt von ',' möglicherweise gefolgt von einer weiteren unsignierten Dezimalinteger, immer gefolgt von '}'. Die Integeren müssen zwischen 0 und 255 einschließlich liegen und die zweite darf die erste nicht übersteigen. Ein Atom gefolgt von einem Satz mit einer Integer i und keinem Komma findet genau i Treffer. Ein Atom gefolgt von einem Satz mit einer Integer i und einem Komma findet i oder mehr Treffer. Ein Atom gefolgt von einem Satz mit zwei Integeren i und j findet i bis j Treffer (einschließlich) Treffer für das Atom.

Ein Atom ist eine Regular Expression umschlossen von '()' (trifft zu für die Regular Expression), ein leeres Set '()' (trifft zu für die Null-Kette) - , ein Klammerausdruck (siehe unten), '.' (trifft zu für jedes einzelnes Zeichen), 'ˆ' (trifft zu für die Null-Kette zu Anfang der Zeile), '$' (trifft zu für die Null-Kette am Ende der Zeile), '\' gefolgt von einem der Zeichen ˆ.\[$()|*+?{\ (trifft zu für das gewöhnliche Zeichen), '\' gefolgt von irgendeinem Zeichen (trifft zu für dieses Zeichen, als ob '\' nicht da wäre), oder ein einzelnes Zeichen ohne weitere Charakteristika (trifft zu für dieses Zeichen). '{' gefolgt von einem anderen Zeichen als einer Ziffer ist ein gewöhnliches Zeichen und nicht der Anfang eines Satzes. Es ist nicht zulässig eine Regular Expression mit '\' enden zu lassen.

Ein Klammerausdruck ist eine Liste von Zeichen umklammert von '[]'. Normalerweise wird jedes einzelne Zeichen aus der Liste gefunden (aber siehe unten). Wenn die Liste mit 'ˆ' beginnt, wird jedes einzelne Zeichen gefunden (aber siehe unten) bis auf den Rest der Liste. Zwei Zeichen in der Liste, die durch '-' getrennt werden, bedeuten den gesamten Bereich zwischen diesen Zeichen (einschließlich der Zeichen) in der Folge. D.h. '[0-9]' in ASCII gilt für jede Dezimalziffer. Es ist nicht zulässig für zwei Bereiche gleiche Endpunkte anzugeben. D.h. 'a-c-e' ist nicht erlaubt.

Um ein ']' in die Liste aufzunehmen, stellen Sie es an die erste Stelle (möglich£erweise nach einem 'ˆ'). Um ein '-' in die Liste aufzunehmen, stellen Sie es an die erste oder die letzte Stelle oder den zweiten Eckpunkt eines Bereichs. Um ein '-' als ersten Endpunkt eines Bereiches zu nehmen, klammern Sie es mit '[.' und '.]' ein, um es zu einem Sammelelement zu machen (siehe unten). Mit Ausnahme dieser Zeichen und einiger Kombinationen mit '[' (siehe nächsten Abschnitt), verlieren alle anderen Sonderzeichen einschließlich '\' innerhalb eines Klammerausdrucks ihre besondere Bedeutung.

Innerhalb eines Klammerausdrucks steht ein Sammelelement (ein Zeichen, eine Zeichenfolge, die zusammen als ein Zeichen darsteht oder ein Sammelfolge-Name für entweder) zwischen '[.' und '.]' für die Folge der Zeichen des Sammelelements. Die Folge ist ein einzelnes Element aus der Liste des Sammelausdrucks. Ein Sammelausdruck mit Elementen aus mehreren Zeichen kann daher für mehr als ein Zeichen zutreffen. D.h. wenn die Sammelfolge ein Element 'ch' enthält, kann die Regular Expression '[[.ch.]]*c' die ersten fünf Zeichen von 'chchcc' finden.

Innerhalb eines Klammerausdrucks, ist ein von '[=' und '=]' umklammertes Sammelelement eine Äquivalenz-Klasse, die für alle äquivalenten Zeichenfolgen aller Sammelelemente steht. (Wenn keine anderen äquivalenten Sammelelemente vorhanden sind, werden sie behandelt, als wären die sie umklammernden Trenner '[.' und '.]'.) Zum Beispiel, wenn o und ˆ zu der Äquivalenz-Klasse gehören, dann sind '[[=o=]]', '[[=ˆ=]]', und '[oˆ]' alle Synonyme. Eine Äquivalenz-Klasse darf nicht der Endpunkt eines Bereichs sein.

Falls eine Regular Expression mehr als eine Untersequenz einer gegebenen Folge findet, wird die erste in der Sequenz vorkommende genommen. Wenn mehrere am gleichen Punkt gefunden werden, wird die längste genommen. Unterbegriffe finden auch die längsten möglichen Unterbegriffe mit der Einschränkung, dass das Ergebnis so groß wie möglich sein soll, und Unterbegriffe nach ihrer Reihenfolge in der Regular Expression prioritiert werden. Beachten Sie, dass Unterbegriffe höherer Ebenen damit Vorrang vor den niederer Ebenen haben.

Die Länge der Übereinstimmungen wird in Zeichen nicht in Sammelelementen gemessen. Eine Null-Kette wird als länger angesehen als gar kein Fund. Z.B. 'bb*' findet alle drei mittleren Zeichen von 'abbbc', (wee|week)(knights|nights)' findet alle zehn Zeichen von 'weeknights'. Wenn '(.*).*' auf 'abc' angewendet wird, findet der Unterbegriff in Klammern alle drei Zeichen, und wenn '(a*)*' auf 'bc' angewendet wird, findet sowohl die gesamte Regular Expression als auch der Unterbegriff in Klammern die Null-Kette.

Intelligenter Auslöser Beispiel

Die intelligenten Auslöser können auch dazu verwendet werden nach Programmnummern, Pfadinformation usw. zu suchen. Das folgende Beispiel kann im Standard-Protokoll für Auto-Empfang verwendet werden, um den Programmnamen der empfangenen Datei zu bestimmen.

Angenommen der Programmname ist im NC-Programm als O2123 gespeichert (wobei 2123 die Programmnummer ist). Wir möchten aber nur nach Programmnummern in einer bestimmten Zeile sehen, wenn die vorausgegangene Zeile mit einem %-Zeichen begann. Hierfür sollten wir angeben:

Was bedeutet das?

ˆDer folgende Auslöser muss am Anfang jeder Zeile vorkommen
%Finde das Zeichen %
.Finde irgendein Zeichen
*Finde Null oder mehr des vorangegangenen Zeichens, in diesem Falle irgendein Zeichen
\LFFinde einen Zeilenvorschub
.Finde irgendein Zeichen
*Finde Null oder mehr des vorangegangenen Zeichens, in diesem Falle irgendein Zeichen
OFinde das Zeichen O
<Start Programmname
[0-9]Jedes Zeichen zwischen 0 und 9
{4}Finde 4 der vorangegangenen Zeichen, in diesem Falle irgendein Zeichen im Bereich 0 bis 9
>Ende Programmname
(Start Unterbegriff
[ˆ0-9]Irgendein Zeichen außerhalb des Bereichs von 0 bis 9
+Finde eines oder mehr des vorangegangenen Zeichens, in diesem Falle irgendein Zeichen außerhalb des Bereichs von 0 bis 9
|Finde den Begriff rechts oder links von 'j'
$Muss am Ende der Zeile sein
)Ende des Unterbegriffs

Anders ausgedrückt:

Suche nach einer Zeile, die mit % anfängt. Akzeptiere alle Zeichen bis zum Ende der Zeile. Bei der nächsten Zeile akzeptiere alle Zeichen bis zu O gefolgt von 4 Ziffern. Auf diese Ziffern muss ein oder mehrere Zeichen folgen, die keine Ziffern sind, oder sie müssen am Ende der Zeile stehen.

Das letzte besagt, dass genau 4 Ziffern angegeben werden müssen. Weil z.B. O12345 zwar O gefolgt von 4 Ziffern ist, aber eben auch Ziffern folgen (5), ist dieses Ergebnis hier ausgeschlossen.

'<' und '>' sind Trenner für den Teil des Ausdrucks, der extrahiert werden sollte, um die Programmnummer, in diesem Falle 4 Ziffern, zu erhalten.