newbie58
Goto Top

Nachtrag zu UltraEdit Script: Daten auslesen

Hallo,
habe von colinardo folgendes script bekommen.

UltraEdit.activeDocument.selectAll();
var leer = " "
var doc = UltraEdit.activeDocument.selection;
var regex = /^N\d+ LAST_TOOL[^\r\n]*|^N\d+ R3\d=[^\r\n]*/gmi;
while (result = regex.exec(doc)){
UltraEdit.activeDocument.write(result + "\r\n");
}

Das script liefert auch die benötigten Dateien.

Beispiel:
N920 LAST_TOOL="5489566" ;LAST_TOOL beschreiben
N1010 R30=800 R96=8000 ; R30 Arbeitsvorschub, Drehzahl fuer Arbeitsvorschub
N1140 LAST_TOOL="5496078" ;LAST_TOOL beschreiben
N1360 R30=900 R96=6000 ; R30 Arbeitsvorschub, R96 Drehzahl fuer Arbeitsvorschub
N1370 R31=450 ; R31 reduzierter Arbeitsvorschub R32 reduzierter Arbeitsvorschub
N1380 R32=225 ; R32 reduzierter Arbeitsvorschub
N1740 LAST_TOOL="5489569" ;LAST_TOOL beschreiben
N1960 R30=2000 R96=8000 ; R30 Arbeitsvorschub, R96 Drehzahl fuer Arbeitsvorschub
N1970 R31=1500 ; R31 Arbeitsvorschub stechen

Um es auch optisch sauber in eine Form zu bringen, brauche ich eine Leerzeile immer vor einem Satz indem das "LAST_TOOL" vorkommt.

Beispiel:
N920 LAST_TOOL="5489566" ;LAST_TOOL beschreiben
N1010 R30=800 R96=8000 ; R30 Arbeitsvorschub, Drehzahl fuer Arbeitsvorschub

N1140 LAST_TOOL="5496078" ;LAST_TOOL beschreiben
N1360 R30=900 R96=6000 ; R30 Arbeitsvorschub, R96 Drehzahl fuer Arbeitsvorschub
N1370 R31=450 ; R31 reduzierter Arbeitsvorschub R32 reduzierter Arbeitsvorschub
N1380 R32=225 ; R32 reduzierter Arbeitsvorschub

N1740 LAST_TOOL="5489569" ;LAST_TOOL beschreiben
N1960 R30=2000 R96=8000 ; R30 Arbeitsvorschub, R96 Drehzahl fuer Arbeitsvorschub
N1970 R31=1500 ; R31 Arbeitsvorschub stechen

Bitte um Hilfe
Danke

Content-ID: 230233

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

Ausgedruckt am: 24.11.2024 um 09:11 Uhr

colinardo
Lösung colinardo 18.02.2014 aktualisiert um 10:29:48 Uhr
Goto Top
Hello Peter,
UltraEdit.activeDocument.selectAll();
var doc = UltraEdit.activeDocument.selection;
var regex = /(^N\d+ LAST_TOOL[^\r\n]*)|^N\d+ R3\d=[^\r\n]*/gmi;

while (result = regex.exec(doc)){
	if (result[1]){
		UltraEdit.activeDocument.write("\r\n" + result + "\r\n");  
	}else{
		UltraEdit.activeDocument.write(result + "\r\n");  
	}
}
hättest du aber auch ruhig in deinem alten Thread nachfragen können face-wink

Grüße Uwe
newbie58
newbie58 18.02.2014 um 10:36:30 Uhr
Goto Top
Hallo Uwe,

vielen Dank, das passt genauso wie ich es benötige.
Einfach klasse Arbeit.

Ich habe da noch eine Frage:
Wie ist das "/(^N\d+ LAST_TOOL[^\r\n]*)|^N\d+ R3\d=[^\r\n]*/gmi" zu interpretieren?

Danke nochmals und schöne Grüße
Peter
colinardo
colinardo 18.02.2014 aktualisiert um 10:49:25 Uhr
Goto Top
Zitat von @newbie58:
Ich habe da noch eine Frage:
Wie ist das "/(^N\d+ LAST_TOOL[^\r\n]*)|^N\d+ R3\d=[^\r\n]*/gmi" zu interpretieren?
Das sind Regular Expressions, das hier jetzt lang und ausführlich zu erläutern würde Stunden dauern. Ausgeschrieben lässt es sich so beschreiben:

Options: case insensitive; ^ and $ match at line breaks

Match either the regular expression below (attempting the next alternative only if this one fails) «(^N\d+ LAST_TOOL[^\r\n]*)»
   Match the regular expression below and capture its match into backreference number 1 «(^N\d+ LAST_TOOL[^\r\n]*)»
      Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
      Match the character “N” literally «N»
      Match a single digit 0..9 «\d+»
         Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      Match the characters “ LAST_TOOL” literally « LAST_TOOL»
      Match a single character NOT present in the list below «[^\r\n]*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
         A carriage return character «\r»
         A line feed character «\n»
Or match regular expression number 2 below (the entire match attempt fails if this one fails to match) «^N\d+ R3\d=[^\r\n]*»
   Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
   Match the character “N” literally «N»
   Match a single digit 0..9 «\d+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
   Match the characters “ R3” literally « R3»
   Match a single digit 0..9 «\d»
   Match the character “=” literally «=»
   Match a single character NOT present in the list below «[^\r\n]*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      A carriage return character «\r»
      A line feed character «\n»
Ein Turorial zu RegEx findest du z.B. hier:
Regular Expressions Tutorial

Bei dieser Variante werden zwei Regex-Patterns mit einem Pipe | Symbol verknüpft (bedeutet oder), um beide Varianten von Zeilen zu erfassen. Also entweder matcht das ein oder das andere Pattern, sonst nichts. Die runden Klammern um das gesamte linke Konstrukt erstellen eine "Backreference" auf die nachher mit einem Index im Array result[x] zugegriffen werden kann. Mit der IF-Prüfung prüfen wir ob diese Backreference mit Daten gefüllt wurde, und wenn ja schreiben wir eine Zeile die zusätzlich einen weiteren Zeilenumbruch vor den Daten einfügt.

Grüße Uwe