Christan hat mir die gewünschten Dokumente und den Beschrieb zugestellt. Nachfolgend eine Erläuterung des Vorgehens.
Die Aufgabe: in doppelseitigen XPress-Dokumenten mit je 95 Bild- und 31 Textboxen die achtstelligen Bestell-Nummern aufspüren und
deren letzte zwei Stellen durch zwei andere Ziffern ersetzen. Die Dokumente werden unter gleichem Namen plus einem Suffix gespeichert.
Die Bestell-Nummern befinden sich pro Doppelseite in sieben kleinen Boxen mit tabellenartigem Text. Die Attribute des Textes sind
gleichförmig, aber weil zwei unterschiedliche Stilvorlagen zugewiesen sind (mal ohne, mal mit Absatzlinie) muss der Text zuerst im
XPress-Tags-Format in eine Datei geschrieben werden, bevor er in die Variable geladen wird. Dadurch kann das Suchen und Ersetzen
am reinen Text vorgenommen werden und die Scripting Addition "RegEx Commands" hilft die vorgegebene Ziffern- und Zeichenfolge
aufzuspüren. Anschliessend wird die neue Textkette in die Datei zurückgeschrieben und wieder in die Textbox geladen.
Damit nur die Textketten, welche die Bestell-Nummern enthalten, durch die Mühlen des doppelten Schreibens und Suchen und Ersetzens
geschickt werden, wird auch mit RegEx Commands der Inhalt geprüft. Dazu werden die Textketten der Reihe nach in einer Repeat-Schleife
in eine Variable geladen. Denn es ist nicht möglich, direkt in den Textboxen danach zu forschen.
Zuerst wird die Variable 'testString' als leer initialisiert = 'set testString to ""'. Dann wird mit 'set actStory to story i' die aktuelle Story in die
Variable 'actStory' geladen. Der Variablen 'testString' wird mit dem RegEx-Befehl 'REMatch'...
... eventuell vorhandene Bestellnummern, welche die Formatierung |zwei Ziffern|Leerraum|vier Ziffern|Minus|zwei Ziffern| aufweisen,
zugewiesen. Die eckigen Klammern enthalten immer '0-9'. Dies bedeutet: eine beliebige Ziffer zwischen 0 und 9. Der Zwischenraum und das
Minuszeichen werden als solche eingegeben und auch erkannt.
Mit dem folgenden Test 'if testString is not "" then' wird der TestString geprüft. Wenn dieser nicht mehr leer ist, dann wird die Story behandelt,
sonst wird zur nächsten übergegangen.
Das Suchen und Ersetzen geschieht mit dem RegEx-Befehl 'REReplace':
Wieder erkennt man die Platzhalter für die Ziffern. Aber diesmal enthält das Suchmuster (= pattern) zwei Klammernpaare, welche die
Platzhalter in zwei Gruppen zusammenfassen. Die erste Gruppe setzt sich aus zwei Ziffern, dem Leerraum, vier Ziffern und dem Minuszeichen
zusammen. In der zweiten Gruppe sind die zwei Ziffern des Versionskennzeichens. Die erste Gruppe wird unverändert übernommen. Dazu
braucht man eine "backreference" mit "\\1". Das Versionskennzeichen ist in der Variablen 'versionNumber' enthalten und wird mit dem
Zeichen '&' angehängt.
Jede übereinstimmende Zeichenfolge wird mit der neuen ersetzt und das Resultat in der Variablen 'newStory' deponiert. Diese neue Textkette
wird dann anstelle der aktuellen Story im Dokument eingesetzt.
Das ganze Script ist zu umfangreich, um hier veröffentlicht zu werden. Untenstehend deshalb ein abgeänderter Auszug, welcher mit einem
einzelnen, geöffneten XPress-Dokument ausgeführt werden kann. Das folgende Script erwartet ein offenes, gespeichertes XPress-Dokument,
welches mehrere Textboxen mit Text enthält. Einige davon sollten Zeichenketten wie "50 8069-90" aufweisen. Die "90" soll durch ein neues
Kennzeichen, z.B. "10" ersetzt werden.
Damit das Suchen und Ersetzen funktioniert, muss die Scripting Addition "RegEx Commands" installiert sein. Diese Freeware findet man auf
der Homepage des Entwicklers, Leonard Rosenthol, <http://www.lazerware.com>
Das Ersetzen der Nummern geschieht in diesem stark gekürzten Script der Einfachheit halber direkt, ohne das zweimalige Schreiben einer
Datei. Und es wird nur ein Dokument behandelt (und nicht mehrere, wie es beim gelieferten Droplet möglich ist).
---
set versionNumber to "10"
set nameSuffix to ".W1"
tell application "QuarkXPress 5.01"
activate
tell document 1
set filePath to (get file path) as string
repeat with i from 1 to count of stories
set testString to ""
set actStory to story i
set testString to REMatch actStory pattern "[0-9][0-9] [0-9][0-9][0-9][0-9]-[0-9][0-9]"
if testString is not "" then
set newStory to my searchReplace(actStory, versionNumber)
set story i to newStory
end if
end repeat
end tell
set newPath to filePath & nameSuffix
save document 1 in newPath
end tell
on searchReplace(actStory, versionNumber)
set newStory to REReplace actStory ¬
pattern "([0-9][0-9] [0-9][0-9][0-9][0-9]-)([0-9][0-9])" with "\\1" & versionNumber
end searchReplace
---
Hans Haesler, hsa@ringier.ch