[GastForen Programmierung/Entwicklung AppleScript Xtension-ersatz

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Xtension-ersatz

Anonym
Beiträge gesamt: 22827

8. Mai 2003, 11:38
Beitrag # 1 von 3
Bewertung:
(1144 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo,

ich habe folgendes problem und wurde vom qxp-forum hier her weiter verwiesen. wir setzen ein xtension in qxp 3.32 namens "BATCH SEARCH&REPLACE" ein. dies xtension hat folgende vorteile (siehe auch url:http://meadowsinfo.com/mishtml/batchsr.htm): man hat hier die möglichkeit mit variablen zu suchen und auch dementsprechend zu ersetzen. folgendes beispiel: wir haben in unserem katalog 6-stellige artikelnummern plus aktionscode (123456-99). bei einem neuen katalog werden die aktionsnummern geändert (123456-35) und dies geschieht mit dieser xtension, weil man hier variablen setzen kann (/#/#/#/#/#/-35) und auch gleichzeitg eine batchfunktion hat in der man z.b. 20 dokumente anwählt und diese werden dann automatisch überarbeitet und abgespeichert.

IST SO WAS MÖGLICH?? auch ohne so eine xtension, weil diese für qxp 5.x nicht mehr zur verfügung steht??

ich würde mich freuen, wenn ich eine nachricht bekomme.

gruß
chris :?:
X

Xtension-ersatz

Hans Haesler
  
Beiträge gesamt: 5826

8. Mai 2003, 15:30
Beitrag # 2 von 3
Beitrag ID: #418115
Bewertung:
(1143 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christian,

wie ich schon im QuarkXPress-Forum erklärt habe, ist es eventuell möglich, eine Script-Lösung für Dein Problem zu finden.

Ein Script kann aber nicht wie eine XTension, die Suchen/Ersetzen-Läufe direkt im Dokument ausführen. Der Text muss dazu 
in eine Variable geladen werden. Entweder direkt oder über den Umweg einer gespeicherten Datei, welche eingelesen wird.
Damit ich analysieren kann, welches Vorgehen notwendig ist, hätte ich gerne ein Dokument zum Üben. Kannst Du mir eines
zustellen? Samt Erklärung, welche Werte durch welche ersetzt werden sollen.

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418114]

Xtension-ersatz

Hans Haesler
  
Beiträge gesamt: 5826

12. Mai 2003, 21:18
Beitrag # 3 von 3
Beitrag ID: #418116
Bewertung:
(1143 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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'...
Code
set testString to REMatch actStory pattern "[0-9][0-9] [0-9][0-9][0-9][0-9]-[0-9][0-9]" 

... 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':
Code
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 

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 &not;
    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


als Antwort auf: [#418114]