[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Martin Fischer
  
Beiträge gesamt: 12626

16. Jul 2013, 10:35
Beitrag # 1 von 10
Bewertung:
(2364 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Liebe Kollegen,

beim Debuggen eines replace()-Befehls bin ich auf ein Problem gestoßen, das ich als solches nicht erkennen kann.

Folgender Code lässt sich als Skript über die Skriptpalette ohne Probleme ausführen:
Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
str = str.replace(/(\<\/data\>)/g,']]>$1');
alert(str);


Versuche ich, diesen Code im ESTK auszuführen, passiert gar nix.
Nicht mal der erste alert()-Befehl wird ausgeführt.
Nur das Warten-Rädchen dreht sich ohne Ende.
Escape ich nun das ">" im zweiten replace()-Befehl, funktioniert es auch im ESTK.

Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
str = str.replace(/(\<\/data\>)/g,']]\>$1');
alert(str);


Das Interessante dabei ist, dass auch ein Auskommentieren der 2. Zeile mit dem unescapten ">" nicht vor dem Problem schützt:

Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
// str = str.replace(/(\<\/data\>)/g,']]>$1');
alert(str);


ESTK scheint bei der Kombination ']]>' in eine Endlosschleife zu geraten.
Ohne die dem '>' voranstehenden ']]' funktioniert's auch.

Da selbst der erste alert()-Befehl nicht ausgeführt wird, nehme ich an, dass die Ursache in der Vorabprüfung der Syntax (etwa fehlende oder zu viele Klammern aufspüren) zu suchen ist.

Lässt sich dieses Verhalten auch unter Windows reproduzieren?

Zum anderen bin ich hinsichtlich der Notwendigkeit des Escapens von reservierten Zeichen beim replace()-Befehl verunsichert. Empfiehlt es sich, im Zweifel oder gar grundsätzlich das Escape-Zeichen auch beim Ersetzen-Ausdruck anzugeben?

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 16. Jul 2013, 10:36 geändert)
X

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

WernerPerplies
Beiträge gesamt: 2688

16. Jul 2013, 11:36
Beitrag # 2 von 10
Beitrag ID: #515069
Bewertung:
(2335 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

Zitat Da selbst der erste alert()-Befehl nicht ausgeführt wird


Der wird nicht ausgeführt, weil, wie Sie richtig erkannt haben, das ESTK in einer Endlosschleife läuft.

Zitat Lässt sich dieses Verhalten auch unter Windows reproduzieren?

Ja.

Es wird Ihnen nicht viel helfen, aber mit der Regex-Maschine von Windows-Net funktioniert Ihr Ausdruck.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#515062]
(Dieser Beitrag wurde von WernerPerplies am 16. Jul 2013, 11:48 geändert)

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Martin Fischer
  
Beiträge gesamt: 12626

16. Jul 2013, 12:04
Beitrag # 3 von 10
Beitrag ID: #515074
Bewertung:
(2316 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,

ich danke für die Bestätigung.

Mich wundert, dass sich das ESTK auch die Mühe macht, den Code innerhalb von auskommentierten Zeilen zu prüfen.

Viele Grüße
Martin




als Antwort auf: [#515069]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

WernerPerplies
Beiträge gesamt: 2688

16. Jul 2013, 12:07
Beitrag # 4 von 10
Beitrag ID: #515075
Bewertung:
(2312 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

Zitat Mich wundert, dass sich das ESTK auch die Mühe macht, den Code innerhalb von auskommentierten Zeilen zu prüfen.


Wieso sollte es?

Sie müssen das ESTK nach jedem Aufruf Ihres Skriptes neu starten.

Haben Sie meinen Screenshot gesehen?

Ich denke, Ihr Ausdruck ist in Ordnung, und es gibt hier einen Bug.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#515074]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Uwe Laubender
Beiträge gesamt: 5226

16. Jul 2013, 12:13
Beitrag # 5 von 10
Beitrag ID: #515079
Bewertung:
(2309 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Martin!
Welche ESTK-Version genau?
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#515074]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Martin Fischer
  
Beiträge gesamt: 12626

16. Jul 2013, 12:40
Beitrag # 6 von 10
Beitrag ID: #515083
Bewertung:
(2286 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

ESTK 4.2.12

Viele Grüße
Martin




als Antwort auf: [#515079]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Martin Fischer
  
Beiträge gesamt: 12626

16. Jul 2013, 12:43
Beitrag # 7 von 10
Beitrag ID: #515084
Bewertung:
(2284 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,

Antwort auf: Wieso sollte es?
Sie müssen das ESTK nach jedem Aufruf Ihres Skriptes neu starten.


Nun, es bleibt eben auch an der Zeile hängen, wenn sie auskommentiert ist.
Auch nach einem Neustart des ESTK.

Antwort auf: Haben Sie meinen Screenshot gesehen?
Ich denke, Ihr Ausdruck ist in Ordnung, und es gibt hier einen Bug.

Ja.
Habe das Bildschirmfoto gesehen und denke auch, dass mein Ausdruck ok ist.
ESTK scheint auf den Ausdruck ']]>' übersensibel zu reagieren.
Es lässt ihn nicht mehr los. ;-)

Viele Grüße
Martin




als Antwort auf: [#515075]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

WernerPerplies
Beiträge gesamt: 2688

16. Jul 2013, 13:06
Beitrag # 8 von 10
Beitrag ID: #515088
Bewertung:
(2260 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,
Zitat Nun, es bleibt eben auch an der Zeile hängen, wenn sie auskommentiert ist.
Auch nach einem Neustart des ESTK.

Bei funktioniert es wieder nach Neustart, das könnte eventuell von der Zielmaschine oder dem Betriebssystem abhängen.

Aber was mich richtig verblüfft:
Code
alert('Hallo!');  
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
str = str.replace(/(\<\/data\>)/g,'\u005D\u005D>$1');
alert(str);

funktioniert bei mir.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign Alle neuen Skripte mit
neu: WpsProjectHandler 31.05.2020, Version 3.XX, neue Funktionen.
MultiSave ist Bestandteil meines WpsProjecthandlers
neu: WpsEanInTables, WpsSaRInHyperlinks
Kundenstimmen


als Antwort auf: [#515084]

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

mx
Beiträge gesamt: 161

16. Jul 2013, 17:41
Beitrag # 9 von 10
Beitrag ID: #515115
Bewertung:
(2213 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

die Zeichenfolge "]]>" erinnert mich stark an SGML bzw. DTD-Notationen.

Vermutlich wird da irgendwo im Hintergrund XML verwendet wird und das Escapen delikater Sequenzen scheitert...

Viele Grüße
Jo

P.S.:
Das gefühlt etwas stabilere ESTK 3.0.0.41 (CS4) kommt auch bei ]]> ohne Probleme durch...


als Antwort auf: [#515062]
(Dieser Beitrag wurde von mx am 16. Jul 2013, 17:48 geändert)

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Uwe Laubender
Beiträge gesamt: 5226

16. Jul 2013, 18:09
Beitrag # 10 von 10
Beitrag ID: #515118
Bewertung:
(2206 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Martin!
Hallo, Werner!

Wirklich seltsam.
Kann das voll und ganz nachvollziehen.
Mit den ESTKs für CS5, CS5.5 und CS6.

Der Fehler tritt nicht auf im ESTK für CS4 und CS3.

Der erste Alert erscheint nicht. Das ESTK befindet sich in einer Endlosschleife.
Abbruch funktioniert sofort durch Drücken des blauen "Scriptausführung stoppen"-Buttons.

Alles auf Mac OSX 10.6.8.

Das Auskommentieren von > in \> hilft.

Die beiden schließenden eckigen Klammern ersetzen mit "\u005D\u005D" hilft auch.

Eindeutig ein Bug ab ESTK CS5!
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#515083]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022