hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


Gaby Leuenberger m
Beiträge: 29
19. Okt 2017, 14:22
Beitrag #1 von 3
Bewertung:
(991 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Rückwärts durch Array iterieren funktioniert nicht


Ich verstehe nicht, warum dieser Code nicht funktioniert:
Code
var _myDoc = app.activeDocument;  
var _myFonts = _myDoc.fonts;
var _FehlFonts = new Array();
for (var x = 0; x < _myFonts.length; x++){
if ( _myFonts[x].status ==FontStatus.NOT_AVAILABLE){_FehlFonts.push(_myFonts[x].name)}
}
for (var i=_FehlFonts.length-1; i>=1; i--){
if(_FehlFonts[i]===_FehlFonts[i-1]){_FehlFonts.pop();}}
var _alleFehlFonts = _FehlFonts.join("\r");


_FehlFonts.length ist 2, dann müsste doch i bei der Zählerdefinition auf 1 gesetzt werden? Die Konsole gibt aber i als 0 aus und ich verstehe nicht, warum. Wenn ich zB FontStatus.AVAILABLE einsetze, ist _FehlFonts.length 13, i =12 und alles funktioniert ...?

Sieht jemand den Fehler?

Merci!

Gruss
Gaby Leuenberger Top
 
X
Gerald Singelmann  M  p
Beiträge: 6178
19. Okt 2017, 16:42
Beitrag #2 von 3
Beitrag ID: #560024
Bewertung:
(977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Rückwärts durch Array iterieren funktioniert nicht


Code
var _myDoc = app.activeDocument;   
var _myFonts = _myDoc.fonts;
var _FehlFonts = new Array();
for (var x = 0; x < _myFonts.length; x++){
if ( _myFonts[x].status ==FontStatus.NOT_AVAILABLE ) {
_FehlFonts.push(_myFonts[x].name)
}
}
var aux = _FehlFonts.length;
for (var i=_FehlFonts.length-1; i>=1; i--) {
if(_FehlFonts[i]===_FehlFonts[i-1]) {
_FehlFonts.pop();
}
}
var _alleFehlFonts = _FehlFonts.join("\r");


Ein schönes Beispiel für den Wert sauberer Einrückungen. Erst nach dem Aufräumen habe ich verstanden, was der Code macht.
Da aber quasi ausgeschlossen, dass der selbe Eintrag 2x im _FehlFonts enthalten ist, verstehe ich nicht, was die zweite Schleife soll.

Dann wiederum: Wenn aux tatsächlich 2 ist, sollte die 2. Schleife mit i=1 anfangen.

--------------------------

InDesign-Wissen und Automatisierung nicht nur rund um die Suite.

http://www.cuppascript.com
als Antwort auf: [#560020] Top
 
Gaby Leuenberger m
Beiträge: 29
19. Okt 2017, 17:00
Beitrag #3 von 3
Beitrag ID: #560025
Bewertung:
(968 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Rückwärts durch Array iterieren funktioniert nicht


Entschuldigung wegen der Einrückungen, Einzeiler schreibe ich noch gerne so, um Platz zu sparen ...

Die Annahme zur zweiten Schleife ist in Bezug zum Beispiel-Code richtig, zum Gesamtskript aber falsch, weil das Array anders befüllt wird. Die Abkürzung hatte ich der Übersichtlichkeit so aufgebaut.

Vielleicht fange ich das ganze aber in der Tat besser mit try/catch ab, anstatt von mehreren Funktionen her ein Array zu füllen und dann die Duplikate wegzuschmeissen ...

Hmm... man verrennt sich so leicht in gewissen Ideen!

Aber es ist tatsächlich so: ich weiss, das Array hat zwei identische Einträge (von zwei Funktionen); trotzdem gibt mir die Konsole i = 0 aus ... ich bleibe also ratlos und suche eine andere Lösung. Immerhin weiss ich jetzt, dass die Schleife im Grundsatz stimmt, Merci!
Gaby Leuenberger
als Antwort auf: [#560024] Top