[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: 12783

16. Jul 2013, 10:35
Beitrag # 1 von 10
Bewertung:
(2481 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?

(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: 2762

16. Jul 2013, 11:36
Beitrag # 2 von 10
Beitrag ID: #515069
Bewertung:
(2452 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.


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: 12783

16. Jul 2013, 12:04
Beitrag # 3 von 10
Beitrag ID: #515074
Bewertung:
(2433 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.


als Antwort auf: [#515069]

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

WernerPerplies
Beiträge gesamt: 2762

16. Jul 2013, 12:07
Beitrag # 4 von 10
Beitrag ID: #515075
Bewertung:
(2429 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.


als Antwort auf: [#515074]

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

Uwe Laubender
Beiträge gesamt: 5316

16. Jul 2013, 12:13
Beitrag # 5 von 10
Beitrag ID: #515079
Bewertung:
(2426 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Martin!
Welche ESTK-Version genau?


als Antwort auf: [#515074]

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

Martin Fischer
  
Beiträge gesamt: 12783

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

ESTK 4.2.12


als Antwort auf: [#515079]

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

Martin Fischer
  
Beiträge gesamt: 12783

16. Jul 2013, 12:43
Beitrag # 7 von 10
Beitrag ID: #515084
Bewertung:
(2401 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. ;-)


als Antwort auf: [#515075]

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

WernerPerplies
Beiträge gesamt: 2762

16. Jul 2013, 13:06
Beitrag # 8 von 10
Beitrag ID: #515088
Bewertung:
(2377 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.


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:
(2330 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: 5316

16. Jul 2013, 18:09
Beitrag # 10 von 10
Beitrag ID: #515118
Bewertung:
(2323 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!


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
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!