Hallo Leute,
beim privaten Austausch mit Armin wurden meine Vermutungen bestätigt:
– Wenn die erste Seite nicht "XX,XX" enthält, sondern einen Euro-Betrag: Die zweite Seite entfernen.
– Das Dokument besteht aus mehr als zwei Seiten. Wieviel? Deren
600 !!!...
Als hiess es, das Script ergänzen. Eine gebrauchsfertige Datei ist unten angehängt.
Code //SeitenEntfernen_02d.js //© 28.10.2018 / Hans Haesler, Châtelard 52, CH-1018 Lausanne //DESCRIPTION:Markierte Seiten entfernen // vorbeugenderweise das Anzeigen von Dialogen aktivieren app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; // testen, ob ein Dokument geöffnet ist if (app.documents.length == 0) { alert ("Es ist kein Dokument offen.", "Achtung"); exit(); } // aktuelles Dokument var curDoc = app.documents[0]; // die Suchen/Ersetzen-Vorgaben zurücksetzen app.findGrepPreferences = app.changeGrepPreferences = null; app.findTextPreferences = app.changeTextPreferences = null; // zuerst die "XX,XX" ////////////////////////////////////////////// // das Suchmuster vorbereiten app.findTextPreferences.findWhat = "XX,XX"; // die Vorkommen finden und zählen var allFound = curDoc.findText(); var nFound = allFound.length; var namesArr = []; // eine Schleife durch die Vorkommen und die Seitennamen auflisten for (var n=0; n<nFound; n++) { var curName = allFound[n].parentTextFrames[0].parentPage.name; var isInArr = checkName(namesArr, curName); if (!isInArr) { namesArr.push(curName); } } // den Array sortieren ... namesArr.sort(numSort); // ... umkehren ... namesArr.reverse(); // ... und zählen var nNames = namesArr.length; // die Seiten entfernen for (var p=0; p<nNames; p++) { try { curDoc.pages.itemByName(namesArr[p]).remove(); } catch (e) { } } // und nun die Seiten mit einem Betrag ///////////////////////////// // das Suchmuster vorbereiten app.findGrepPreferences.findWhat = "[0-9]+,[0-9]{2}"; // die Vorkommen finden und zählen var allFound = curDoc.findGrep(); var nFound = allFound.length; var namesArr = []; // eine Schleife durch die Vorkommen und die Seitennamen auflisten for (var n=0; n<nFound; n++) { var curName = allFound[n].parentTextFrames[0].parentPage.name; var nxtName = ""+((curName*1)+1); var isInArr = checkName(namesArr, nxtName); if (!isInArr) { namesArr.push(nxtName); } } // den Array sortieren ... namesArr.sort(numSort); // ... umkehren ... namesArr.reverse(); // ... und zählen var nNames = namesArr.length; // die Seiten entfernen for (var p=0; p<nNames; p++) { try { curDoc.pages.itemByName(namesArr[p]).remove(); } catch (e) { } } // die Suchen/Ersetzen-Vorgaben zurücksetzen app.findGrepPreferences = app.changeGrepPreferences = null; app.findTextPreferences = app.changeTextPreferences = null; //////////////////////////////////////////////////////////////////// // das Ende der Aktion verkünden var dlog = new Window("palette"); dlog.size = [320,100]; dlog.add("statictext", [80, 100, 320, 116], "Fertig."); dlog.show(); // eine kleine Pause $.sleep(999); // das Fenster schliessen dlog.close(); //////////////////////////////////////////////////////////////////// // diese Funktion prüft, ob sich der Name schon im Array befindet function checkName(namesArr, curName) { for (var n=0; n<namesArr.length; n++) { if (namesArr[n] == curName) { return true; } } return false; } //////////////////////////////////////////////////////////////////// // die Funktion, welche Zahlen-Strings sortiert function numSort(a, b) { return a - b; } Zuerst werden – wie gehabt – die Seiten entfernt, in welchen "XX,XX" enthalten ist.
Dann wird ein Grep-Suchstring definiert (und angewendet), mit welchem Beträge ab 0,01 gefunden werden. Nach oben unbegrenzt. Wieder werden die Seitenzahlen ermittelt. Aber jede wird um eins erhöht, weil die nächste Seite entfernt werden muss.
Gruss, Hans