[GastForen Programmierung/Entwicklung AppleScript Sprachkürzel in Absatzformatnamen austauschen

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

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12783

11. Apr 2005, 22:22
Beitrag # 1 von 9
Bewertung:
(2025 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Folgendes Script für Indesign habe ich zum Austauschen eines Sprachenkürzels im Formatnamen (DEU für Deutsch, FRA für Französisch) zusammengebastelt. Es funktioniert, doch braucht es seine Zeit.

[code:1]
set myAltSprach to (text returned of (display dialog "alter Sprachteil: " default answer "DEU"))
set myNeuSprach to (text returned of (display dialog "neuer Sprachteil: " default answer "FRA"))

set oldDelimiters to AppleScript's text item delimiters

tell application "InDesign CS"
 set myDoc to active document
 set myStyles to paragraph styles of myDoc whose name is not "[No Paragraph Style]"
 repeat with myCounter from 1 to (count of myStyles)
  set name of item myCounter of myStyles to my convertName(name of item myCounter of myStyles, myAltSprach, myNeuSprach)
 end repeat
end tell
set AppleScript's text item delimiters to oldDelimiters

on convertName(myName, theOldString, theNewString)
 -- alten Namensteil loeschen
 set AppleScript's text item delimiters to {theOldString}
 set tmpList to every text item of myName as list
 -- neuen Namensteil einfügen
 set AppleScript's text item delimiters to {theNewString}
 set myName to tmpList as string
end convertName
[/code:1]

Wie könnte man das Script noch beschleunigen?
Im Moment werden die Parameter für das alte und das neue Sprachkürzel jeweils mit an die Routine übergeben.
X

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5826

12. Apr 2005, 10:09
Beitrag # 2 von 9
Beitrag ID: #419470
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

gleich vorneweg: InDesign ist von Natur aus langsam, weil überladen. Und etwas
Vergleichbares zum XPress-'do script'-Turbo gibt es nicht.

Wieviele Stilvorlagen hat Dein Dokument? Deren Namen werden ja vom Script in eine
Liste gesetzt. Und der Zugriff auf Listenelemente kann mit AppleScript beschleunigt
werden, wenn man beim Aufruf das Wort 'my' vor den Variablennamen setzt:
set name of item myCounter of my myStyles to my convertName(name of item myCounter of my myStyles, myAltSprach, myNeuSprach)

Dabei wird einem bewusst, wie unnötig das generelle 'my'-Präfix ist. Du hast dies auch
bemerkt und es beim Handlernamen schon mal weggelassen. ;-)

Aber mit dem 'my'-Trick dürfte die Ausführungszeit nur geringfügig verringert werden,
weil die Liste zu kurz ist (bei 30 Namen messe ich einen Unterschied von 0.3 Sekunden).

Du hast darauf hingewiesen, dass die Parameter bei jedem Aufruf an den Handler
übergeben werden. Wenn man sie also als 'global' (oder als 'property') definieren würde,
dann wären sie dem Handler bekannt, ohne dass sie über den Aufruf durchgereicht werden
müssen. Diese Vereinfachung sollte doch einen spürbaren Unterschied ergeben. Doch Zeit-
stoppungen zeigen, dass dem nicht so ist.

Was könnte man noch tun? Die besten Werte erhielt ich, wenn die Absatzformat-Palette
eingeklappt und InDesign nicht das aktive Programm ist (und immer mit my myStyles).
– InDesign aktiv, Palette ausgefahren = 12.0 Sekunden
– InDesign nicht aktiv, Palette ausgefahren = 8.3 Sekunden
– InDesign aktiv, Palette eingeklappt = 2.4 Sekunden
– InDesign nicht aktiv, Palette eingeklappt = 1.3 Sekunden
Das sind die Resultate (mit 30 Namen), wenn das Script ab Scripteditor gestartet wird.

Eine weitere Beschleunigung kann erzielt werden, wenn das Script ab InDesign-Script-
palette gestartet wird. Und dabei ist es besser, wenn InDesign im Vordergrund bleibt.
– InDesign aktiv, Palette eingeklappt = 0.342 Sekunden

Das ist doch schon recht flink. Oder nicht? :-)

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12783

12. Apr 2005, 10:23
Beitrag # 3 von 9
Beitrag ID: #419471
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

herzlichen Dank für Deinen Speedtest.
Tatsächlich handelt es sich bei mir nicht um mehr als 30 Absatzstilvorlagen (ich habe das Script für jemanden in einem anderen Forum - HDF/Indesign - entwickelt und dachte, der könnte vielleicht noch einen Turbo brauchen).

In der Tat habe ich nach so was wie globalen Variablen für myAltSprach und myNeuSprach gesucht, aber nun auch festgestellt, daß es keine deutliche Beschleunigung bringt.

Kann es sein, daß die wiederholte Delimiters-Umwandlung eine Bremse ist?

Dank nochmals für Dein Feedback und deine Geschwindigkeitskontrollen.


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5826

12. Apr 2005, 10:48
Beitrag # 4 von 9
Beitrag ID: #419472
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
Zitat Kann es sein, daß die wiederholte Delimiters-Umwandlung eine Bremse ist?

Dieses unablässige Umwandeln kostet sicher etwas Zeit, ist aber kaum messbar.
Der ganz, ganz, ganz grosse Rest wird von InDesign verbraucht.

Wieviele Namen müssen umbenannt werden? Und wie lange dauert es?
Sind denn Null-Komma-drei Sekunden für 30 Namen immer noch zu lange? ;-)

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Martin Fischer
Beiträge gesamt: 12783

12. Apr 2005, 11:09
Beitrag # 5 von 9
Beitrag ID: #419473
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hans,
das Tempo ist prima so.
Ich wußte zwar, daß die ausgefahrenen Paletten eine Bremse sind, hatte aber nicht damit gerechnet, daß die Bremse so stark ist.

Mir ging's neben dem Tempo auch um eine Kritik des Codes.
Und mit den GLOBALs und PROPERTYs bin ich auch ein Stück weitergekommen.
Die MYs vor "myStyles" und dem Aufruf der Funktion haben mich etwas stutzig gemacht. Was ist der Hintergrund dieses Tricks und warum bringt der eine Geschwindigkeitssteigerung?


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5826

12. Apr 2005, 12:59
Beitrag # 6 von 9
Beitrag ID: #419474
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

es spielt keine Rolle, ob die beiden Variablen als 'global' oder als 'property' definiert sind.
Bei letzteren muss man nur darauf achten, dass sie zuerst leer initialisiert werden ...
---
property oldLang : ""
property newLang : ""

set oldLang to (text returned of (display dialog "alter Sprachteil: " default answer "DEU"))
set newLang to (text returned of (display dialog "neuer Sprachteil: " default answer "FRA"))

---
... sonst erscheint der Dialog schon beim Prüfen der Syntax. Und beim Abspielen des Scripts nicht mehr ...

N.B.: Es ist ratsam, wie hier gezeigt, englisch-verständliche Variable-Namen zu verwenden. Wenn Du
plötzlich im US-InDesign-Forum eine Frage stellen musst, wird Dir sicher eher geholfen.

Das Ein- und Ausfahren der Paletten kann man – soweit ich weiss – nicht direkt per Script
vornehmen (eventuell mit UI-Scripting?). Aber man kann den Applikationsbefehl 'palettes visible',
welcher die Sichtbarkeit der Paletten beeinflusst, einsetzen.
---
tell application "InDesign CS"
   set palettes visible to false
   --
   -- Weitere Befehle
   --
   end repeat
   set palettes visible to true
end tell

---

Der Hintergrund des 'my'-Tricks zum Beschleunigen von Zugriffen auf Listen-Elemente ist obskur.
Nicht richtig dokumentiert, sorgt er aber ab und zu für regen Meinungsaustausch in der AS-user's-
Mailing-Liste. In Kürze: Damit werden (anscheinend unnötige) Kontrollen von AppleScript umgangen.

Etwas Lektüre findest Du hier: "Zugriff auf Listen-Elemente beschleunigen"
http://www.page-online.de/page/forum/viewthread/208

Das ist zwar lange her, aber immer noch gültig. Und kürzlich habe ich ein Beispiel gesehen,
in welchem das 'my' auch beim Erstellen der Liste eingesetzt wird. Und die Ausführung ist
tatsächlich nochmals schneller, doch mit dem Script, bei welchem ich wirklich jede Steigerung
brauchen könnte, ergab dies einen vorzeitigen Abbruch: Überlauf des Speichers.

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Anonym
Beiträge gesamt: 22827

12. Apr 2005, 22:09
Beitrag # 7 von 9
Beitrag ID: #419475
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

da ich mit/zu Hans nicht kompatibel bin, erlaube ich mir einen ganz anderen Diskussionsansatz:

--
set mySearch to (text returned of (display dialog "Suchbegriff: " default answer "DEU"))
set myReplace to (text returned of (display dialog "Ersetzen durch: " default answer "FRA"))
tell application "InDesign CS"
 tell active document
  set pStyles to (every paragraph style)
  repeat with i in pStyles
   set name of i to do shell script ¬
    "echo '" & name of i & "' | sed s/'" & mySearch & "'/'" & myReplace & "'/"
  end repeat
 end tell
end tell
--


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Hans Haesler
  
Beiträge gesamt: 5826

13. Apr 2005, 08:42
Beitrag # 8 von 9
Beitrag ID: #419476
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

der Vorschlag von Karsten besticht durch seine kompakte Konstruktion.
Aber der Aufruf der Shell benötigt etwas mehr Zeit als die 'delimiters'-Lösung.
Der Unterschied ist spürbar, aber fällt er ins Gewicht?

40 Absatzformate, Palette eingeklappt, Script ab Scriptpalette gestartet:
Martin ..... 0.5 Sekunden
Karsten ... 1.3 Sekunden

Egal, für welche Lösung Du Dich entscheidest: Wichtig scheint mir, dass das
Umbenennen in einen 'try'-Wickel gepackt wird. Gestern geschah es ein paar Mal,
dass ein Name verunstaltet wurde. Manchmal stürzte InDesign ab, manchmal nicht.
Heute schickte die Shell eine Fehlermeldung zurück. Aber ob all dieses Ungemach
mit 'try / end try' verhindert werden kann, weiss ich nicht ...

Gruss, Hans


als Antwort auf: [#419469]

Sprachkürzel in Absatzformatnamen austauschen

Anonym
Beiträge gesamt: 22827

13. Apr 2005, 09:05
Beitrag # 9 von 9
Beitrag ID: #419477
Bewertung:
(2024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

es war doch NUR eine Diskussionsgrundlage (mit viel Verbesserungspotenzial), da mir Aussagen, wie

Zitat gleich vorneweg: InDesign ist von Natur aus langsam, weil überladen. Und etwas
Vergleichbares zum XPress-'do script'-Turbo gibt es nicht.


einfach abgehen.
Ob nun sed, awk, perl (als Exekutive) etc. ist m. E. hierbei genau so zweitrangig, wie die reine Ausführungszeit.

Historisch gewachsene Sichtweisen/Ansätze sind halt IMHO nicht immer wirklich hilfreich.

Karsten


als Antwort auf: [#419469]
X

Aktuell

Web / SEO / Blockchain / Betriebssystem
300

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
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. 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 / Horizon

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

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 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

Nein

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!