Problem bei Makro mehrfach ausführen

holt4800
2012-11-09
2012-11-13
  • holt4800
    holt4800
    2012-11-09

    Hallo,

    ich verwende np++ 5.9.3 und möchte in einer STEP-Datei nach folgendem Muster ein Makro aufzeichnen/mehrfach ausführen:

    Header-Zeilen
    #5=PRODUCT('676145','ZB Stellschraube','',(#2)) ;
    #27=PRODUCT('676150A','Stellschraube','',(#2)) ;

    Die beiden ersten Werte in den runden Klammern innerhalb der Hochkommas sollen gegenseitig durch den jeweils anderen Wert ergänzt werden, dh. in beiden Werten soll das selbe stehen.
    Sieht dann so aus:
    #5=PRODUCT('676145 ZB Stellschraube','676145 ZB Stellschraube','',(#2)) ;
    #27=PRODUCT('676150A Stellschraube','676150A Stellschraube','',(#2)) ;

    Also habe ich ein Makro aufgezeichnet, das folgendes macht:
    - Suche nach =PRODUCT("
    - Ersetze ',' durch Leerzeichen
    - Suche mittels regulärem Ausdruck nach '*' (=Text innerhalb der ersten beiden Hochkommas)
    - kopiere markierten Text, gehe 1 Zeichen nach rechts, füge , und kopierten Text ein

    Wenn ich das Makro einzeln ausführe, funktioniert alles tadellos.
    Da aber teilweise in mehreren hundert Zeilen der Vorgang durchgeführt werden sollte, wollte ich Makro mehrfach ausführen verwenden.

    Das funktioniert aber nicht richtig.
    Der Cursor bleibt immer in der 1. Zeile stehen und fügt die Änderungen dort ein. Der eingefügte Text stammt aber schon aus der richtigen Zeile.

    Was mach ich falsch? Oder ist das ein Bug?

     
  • Wenn Du das machst:
    - Suche nach =PRODUCT(" - Ersetze ',' durch Leerzeichen
    - Suche mittels regulärem Ausdruck nach '*' (=Text innerhalb der ersten beiden Hochkommas)
    dann kann das m.E. nur funktionieren, wenn Du vor der 'regulären' Suche auch wieder VOR dem ersten ' mit dem Cursor stehst.

    Wie hast Du das gelöst?

    Oder anders: wenn Du das Makro mehrfach ausführst, drückst Du noch etwas zwischendurch, damit das auch so funktioniert?

     
  • Redoute
    Redoute
    2012-11-09

    1. Mit regular expressions könntest du die Ersetzung so machen:
    Suchen nach:

    =PRODUCT\('(.*?)','(.*?)'
    

    Ersetzen durch:

    =PRODUCT('\1 \2','\1 \2'
    

    2. Für die Frage, warum dein Makro nicht funktioniert, sind deine Angaben nicht detailliert genug. Zum Nachvollziehen könnte der entsprechende "Makrotext" in deiner shortcuts.xml weiterhelfen.

     
  • holt4800
    holt4800
    2012-11-10

    Vielen Dank für eure raschen Antworten!

    @martiniclan,

    ich habe vergessen zu erwähnen, dass ich nach der Suche nach =PRODUCT( die Pos1-Taste gedrückt habe.

    Bei der mehrfachen Ausführung (mittels Play-Symbol in der Symbolleiste) drücke ich dann nichts mehr.

    @redoute:
    Ich bin am Montag wieder in der Firma, da werde ich die shortcuts.xml Datei hochladen.

     
  • Redoute
    Redoute
    2012-11-11

    Wie ich inzwischen sehe, wird das gleiche Thema auch nebenan diskutiert: Suchen/Ersetzen wird bei "Makro mehrfach ausführen" ignoriert. Du schreibst "Der eingefügte Text stammt aber schon aus der richtigen Zeile.", was ich merkwürdig finde. Ich vermute eher, es wird der Text eingefügt. der sich vor Makroausführung in der Zwischenablage befindet.

    Solange der Bug nicht behoben ist, bleibt dir nur, auf die Kombination Suchen/Ersetzen mit "Makro mehrfach ausführen" zu verzichten. Deine Aufgabe sollte sich mit regular expressions ohne Makro lösen lassen.

     
  • holt4800
    holt4800
    2012-11-13

    @redoute:

    Es handelt sich also um einen Bug, da kann ich lange probieren.

    Du liegst richtig mit der Vermutung, dass der Text, der sich in der Zwischenablage befindet, bei jeder Ausführung über Makro mehrfach ausführen" eingefügt wird.

    Die komplette Ersetzung mittels regular expressions funktioniert übrigens tadellos und ist im Endeffekt viel einfacher als die Version mit dem Makro.

    Vielen Dank!

     
  • holt4800
    holt4800
    2012-11-13

    Ein kleines Problem ist noch aufgetauch, das mir aber ein Kollege gelöst hat:

    In STEP-Dateien werden Unicode-Character auf folgende Weise dargestellt:
    z.B. 'Gehäuse'
    'Geh\X2\00E4\X0\use'

    Hier funktioniert der Such-Ausdruck nicht.

    Lösung:
    Suchen nach:

    =PRODUCT\('(*)','(*)'