Forenindex » Programmierung/Entwicklung » JavaScript » Namen aller Elemente eines InDesign Dokumentes in Array schreiben

Namen aller Elemente eines InDesign Dokumentes in Array schreiben

Udo Göpfert
Beiträge gesamt: 15

8. Jan 2015, 18:38
Bewertung:

gelesen: 2576

Beitrag als Lesezeichen
Hallo

Ich arbeite an einem Skript das ein Indesign-Dokument nach mehrfach verwendeten Namen von platzierten Elemente sucht.

Das Skript arbeitet soweit ganz gut.
Ich habe jedoch ein Performance Problem.
Die zu bearbeitenden Dokumente haben mehrere hundert Elemete.

Das nachstehende Skript benötigt für das Einlesen von 850 Elementen auf 250 Ebenen ca. 30 Sekunden.
Die große Anzahl der Ebenen für Templating benötigt.

ich arbeite InDesign CS6. (Win + MAC)

Gibt es eine schnellere bzw. effektivere Möglichkeit?

LG Udo

Code
// Objekte einlesen 
var objekte = new Array();
for (var i = 0; i < doc.pageItems.length; i++)
{
objekte.push(doc.pageItems.item(i).name);
}


(Dieser Beitrag wurde von Udo Göpfert am 8. Jan 2015, 18:41 geändert)

Namen aller Elemente eines InDesign Dokumentes in Array schreiben

Martin Fischer
Beiträge gesamt: 12783

9. Jan 2015, 07:35
Bewertung:

gelesen: 2527

Beitrag als Lesezeichen
Hallo Udo,

eine Alternative zum push()-Befehl wäre die zählerbasierte Zuweisung der Array-Elemente:

Code
var objekte = new Array();  
for (var i = 0; i < doc.pageItems.length; i++)
{
objekte[i] = doc.pageItems.item(i).name;
}


Da es sich bei den pageItems (anders als bei allPageItems) um eine Kollektion handelt, ginge alternativ auch

Code
var pi_names = doc.pageItems.everyItem().name; 


Dies dürfte die schnellste Methode sein.

Viele Grüße
Martin


Namen aller Elemente eines InDesign Dokumentes in Array schreiben

Udo Göpfert
Beiträge gesamt: 15

10. Jan 2015, 19:09
Bewertung:

gelesen: 2453

Beitrag als Lesezeichen
Hallo Martin

Danke für den Programmschnipsel.
Die Zeit zum Einlesen aller 850 Objekte aus dem Beispiel ist jetzt vernachlässigbar.
Es ist also die schnellste Methode.

LG Udo

Namen aller Elemente eines InDesign Dokumentes in Array schreiben

kzfi
Beiträge gesamt:

17. Jan 2015, 12:40
Bewertung:

gelesen: 2345

Beitrag als Lesezeichen
Hallo Udo,

Caching die length des Arrays ist schneller als kalkurieren bei jeder iteration

Code
for (var i = 0; c = doc.pageItems.length; i < c; i++) 


kzfi