[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Array Überprüfung

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Array Überprüfung

faxinger666
Beiträge gesamt: 167

15. Nov 2020, 17:48
Beitrag # 1 von 4
Bewertung:
(6193 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

bei folgendem Problem komme ich leider nicht weiter;

Ich habe ein Array mit den Namen der Objektformate die in einem Skript verwendet werden. (_Skript_OF )

Dieses Namen-Array soll gegen die tatsächlich im Dokument vorkommenden Objektformatnamen geprüft werden.

Und genau hier finde ich keine Lösung.

Das ist mein Code:
Code
var _dok = app.activeDocument;  

var _Skript_OF = ["preis_1","preis_2", "preis_A", "preis_groß", "preis_klein", "preis_Oben", "preis_unten" ]

var _dok_OF = _dok.objectStyles.everyItem().name;


for (var z=0; z < _Skript_OF.length; z++) {


if (_Skript_OF[z] != _dok_OF) {
alert ("Fehler")}
};

Wie kann man das machen?
Also wenn der jeweilige Skript-Objektformatname im Dokument als Objektformatname nicht existiert soll ein Fahler ausgegeben werden.

Ich hoffe es ist halbwegs verständlich was ich erreichen möchte.

Danke
X

Array Überprüfung

WernerPerplies
Beiträge gesamt: 2752

15. Nov 2020, 18:29
Beitrag # 2 von 4
Beitrag ID: #577585
Bewertung:
(6185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin faxinger,

das wäre mein Vorschlag, sollte für alle Formattypen funktionieren:
Code
var /*Array*/styleNames = ["Test", "preis_1","preis_2", "preis_A", "preis_groß", "preis_klein", "preis_Oben", "preis_unten" ]; 
/*Array*/missing = checkStylesAgainstNameList(app.activeDocument, "object", styleNames);

if (missing.length > 0){
alert("{0} Fehler".replace("{0}", (missing.length)).toString());
alert(missing.join("\n"));
}
/*Array*/function checkStylesAgainstNameList(/*document*/doc, /*string*/type, /*Array*/styleNames){
var /*Array*/missingStyles = [],
/*Int*/l = styleNames.length;

for (var i = 0; i<l; i++){
if (!(doc[type+"Styles"].itemByName(styleNames[i]).isValid)){
missingStyles.push(styleNames[i]);
}
}
return missingStyles;
}



als Antwort auf: [#577584]

Array Überprüfung

Gerald Singelmann
  
Beiträge gesamt: 6269

16. Nov 2020, 04:02
Beitrag # 3 von 4
Beitrag ID: #577587
Bewertung: ||
(6122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Diese Zeile

Code
if (_Skript_OF[z] != _dok_OF) { 


bedeutet

Zitat Wenn das z-te Element der einen Liste gleich der gesamten anderen Liste ist


Deswegen funktioniert das nicht.

Der Brot-und-Butter-Weg, zwei Listen abzugleichen, ist:
Code
for (var i = 0; i < liste1.length; i++ ) { 
var missing = true;
inner: for ( var j = 0; j < liste2.length; j++ ) {
if ( liste1[i] == liste2[j] ) {
missing = false;
break inner;
}
}
if ( missing ) alert( "fehlt" );
}


Wenn ich das richtig in Erinnerung habe, liefert
Code
var _dok_OF = _dok.objectStyles.everyItem().name; 

auch nicht alle Formate, sondern nur die, die nicht in Ordner stecken. Für alle gibt es "allObjectStyles."


als Antwort auf: [#577584]

Array Überprüfung

faxinger666
Beiträge gesamt: 167

17. Nov 2020, 08:18
Beitrag # 4 von 4
Beitrag ID: #577598
Bewertung:
(5996 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Gerald und Werner,

vielen Dank für die Antworten. Genau das habe ich gesucht.

Ich finde beide Lösungsansätze interessant. Es führen doch viele Wege nach Rom.

Das hat mir sehr geholfen :-).

Einen schönen Tag noch und alles Gute.

LG
faxinger


als Antwort auf: [#577585]
(Dieser Beitrag wurde von faxinger666 am 17. Nov 2020, 08:20 geändert)
X