[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt FindChangeScripts fehlendes Absatzformat ignorieren

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

FindChangeScripts fehlendes Absatzformat ignorieren

Arielle93
Beiträge gesamt: 13

19. Jan 2021, 09:42
Beitrag # 1 von 4
Bewertung:
(8832 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

ich hoffe ihr seit alle gesund und munter.. ich habe mal wieder ein Problem mit einem Skript.


Die Basis ist FindChangeScripts.


Ich suche bestimmte Wörter in einem Dokument, findet er das, weißt es diesem einem bestimmten Absatzformat zu.

z.B.. Suche "1. Anleitung|2. Technische Daten" und weise diese dann das Absatzformat "Überschrift DE" zu
Das gleiche habe ich dann mit dem Englischen, Französischen u.s.w. (insgesamt 24 Sprachen) Dokumenten,
in Englisch sieht das dann so aus "1. Manual|2. Technical specifications" und weise diese dann das Absatzformat "Überschrift ENG" zu
diese Sammlung habe ich in einem Skript zusammengepackt...

Das Problem welches ich jetzt habe, ist das in dem Deutschen Dokument natürlich nicht das Absatzformat "Überschrift ENG" (+ die weiteren Sprach-Überschriften) vorhanden sind, diese will ich auch nicht dort drin haben.

Er meldet mir dann immer nach dem jeweiligen fehlenden Absatzformat folgenden Fehler:


Script Alert
Error: Fehlendes Ersetze-Absatzformat
[Überschrift ENG] bei Abfrage [01. 03 ENG Überschrift] at line 45



Kann man diese Erros´s irgendwie ignorieren? Ich weiß ja dass das Absatzformat nicht drin ist und will nicht in einem Dokument 23x auf OK drücken müssen....




Hier als Beispiel der Ausschnitt vom Tschechischen:

Code
 
// Query [[03. 03 CZ Kapitelüberschrift richtig]] -- If you delete this comment you break the update function
try {
app.findChangeGrepOptions.properties = ({includeFootnotes:true, kanaSensitive:true, widthSensitive:true});
app.findGrepPreferences.properties = ({findWhat:"1.\\tBezpečnostní pokyny\\r|2.\\tPopis přístroje\\r|3.\\tPoužití podle účelu určení\\r|4.\\tTechnická data\\r|5.\\tPřed uvedením do provozu\\r|6.\\tObsluha\\r"});
app.changeGrepPreferences.properties = ({});
style = getStyleByString(doc, 'Überschrift CZ', 'paragraphStyles');
if (!style.isValid) throw Error(localize(({en:"Missing change pagraphstyle [%1] for query [%2]", de:"Fehlendes Ersetze-Absatzsformat [%1] bei Abfrage [%2]", fr:"La requête [%2] invoque en remplacement un style de paragraphe manquant : [%1]", ja_JP:"クエリ[%2]の置換形式に設定された段落スタイル[%1]が見つかりませんでした", nl:"Vervangende alineastijl [%1] mist voor zoekopdracht [%2]"}), 'Überschrift CZ', '03. 03 CZ Kapitelüberschrift richtig') );
app.changeGrepPreferences.appliedParagraphStyle = style;
changeObject.changeGrep();
} catch (e) {alert(e + ' at line ' + e.line)}
app.findGrepPreferences = NothingEnum.NOTHING;
app.changeGrepPreferences = NothingEnum.NOTHING;




Danke im vorraus für eure Hilfe!
X

FindChangeScripts fehlendes Absatzformat ignorieren

WernerPerplies
Beiträge gesamt: 2762

20. Jan 2021, 08:12
Beitrag # 2 von 4
Beitrag ID: #578303
Bewertung:
(8736 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Arielle93,

Fehler ignorieren ist in der Programmierung die schlechteste aller Lösungen, aber wenn Du das unbedingt willst:
ersetzte
catch (e) {alert(e + ' at line ' + e.line)}
durch
catch (e) {/*alert(e + ' at line ' + e.line)*/}

Noch eine neugierige Frage_
rufst Du dieses Skript
24 x Anzahl der Begriffe + Laden der Dateien auf?

Wenn ja, könnte das Skript sicherlich eine Optimierung vertragten.


als Antwort auf: [#578282]

FindChangeScripts fehlendes Absatzformat ignorieren

Arielle93
Beiträge gesamt: 13

20. Jan 2021, 09:54
Beitrag # 3 von 4
Beitrag ID: #578306
Bewertung:
(8720 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Morgen Werner,

hat an sich funktioniert, leider merk ich jetzt aber dass das doch nicht ganz zum Ziel führt.. aber für die Zukunft bestimmt trotzdem gut zu wissen das man Fehlermeldungen ignorieren kann.

Jetzt muss ich wohl für jede Sprache nochmal ein extra Skript erstellen der mir dann die Überschriften richtig formatiert...
Leider haut er mir ja die formatierungen mit den Skript ChainGREP raus... denn davor sind die Überschriften noch korrekt.
Gibt es vielleicht die Möglichkeit die formatierung beizubehalten oder im Skript zu sagen "Formatiere mir die gefundenen Texte in "Überschrift DE" wenn dieses Format nicht vorhanden ist, nehme "Überschrift ENG" "Überschrift FR" "Überschrift IT" ... usw.?

Ich wende dieses Skript 1x für jede Sprache an und nicht 1x für 24 Sprachen. An sich ist das auch gut so, da ich danach nochmal kontrollieren muss ob nicht zu viel oder zu wenig gelöscht worden ist.

Für ein anderes Skript könnte ich das allerdings gut gebrauchen....

Code
7	function main() {	 
8 if (app.layoutWindows.length == 0) return;
9 var changeObject = app.documents[0];
10 if (changeObject.hasOwnProperty('characters') && changeObject.characters.length == 0) return;
11 var doc = app.documents[0];
12 var style;
13 var scriptVersion = app.scriptPreferences.version;
14 app.scriptPreferences.version = 16.0;
15 var options = app.findChangeGrepOptions.properties;
16 app.findGrepPreferences = NothingEnum.NOTHING;
17 app.changeGrepPreferences = NothingEnum.NOTHING;


Glaub der knackende Punkt verbirgt sich hier unter Zeile 9. & 11. richtig?




Und wenn wir schon dabei sind... gibt es eine Möglichkeit gefundene Texte zu kopieren? Bisher hab ich dazu absolut nichts gefunden...
Nur den gefundenen Text mit der Zwischenablage zu ersetzen ist mir bisher bekannt... oder den gefundenen Text beizubehalten indem ich in GREP $0 sage und dann noch einen Text hinzufüge... ist aber trotzdem nicht das selbe wie kopieren

Code
133	try {		 
134 app.findChangeGrepOptions.properties = ({includeFootnotes:true, kanaSensitive:true, widthSensitive:true});
135 app.findGrepPreferences.properties = ({findWhat:"(Gefahr!)"});
136 app.changeGrepPreferences.properties = ({changeTo:"KOPIERE GEFUNDENEN TEXT"});


Hier muss wohl in der Zeile 136 was geändert werden...

Ganz liebe Grüße
Franzi


als Antwort auf: [#578303]

FindChangeScripts fehlendes Absatzformat ignorieren

WernerPerplies
Beiträge gesamt: 2762

20. Jan 2021, 11:01
Beitrag # 4 von 4
Beitrag ID: #578309
Bewertung:
(8688 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Franzi,

vorweg, ich lebe von Skriptprogrammierung, und deswegen werde ich Dir kein fertiges Skript liefern, kann Dir aber schildern, wie ich solch eine Aufgabe angehen würde.

Zuerst einmal, wie ich Dir schon schrieb, ist Fehler ignorieren für mich keine Option, weil dann auch Fehler durchrutschen, die ich gerne kennen würde.

Es wäre also besser, statt
(!(isValid)) throw Error
if (isValid)
mache etwas zu programmieren.

Für Deine Anwendung wäre es natürlich schön, wenn es eine echte Fehlerbehandlung gäbe.

Doch dazu später.

Ich weiß nicht, ob ich richtig liege, aber ich vermute mal, Du musst mehrere Formate in 24 Sprachen zuweisen.

Also muss Dein Skript wissen, welche (Sprachdatei) es gerade am Wickel hat.
Das hann man über den Dateinamen oder über ein bestimmtes Format ermitteln.
Dann muss Dein Skript wissen, welchen Textstellen welche Formate zuzuweisen sind und was Dein Skript machen muss, wenn das passende Format nicht vorhanden ist.

Ich würde dafür nicht viele Skripte schreiben, sondern ein Skript mit allen notwendigen Informationen versehen, die es dann nacheinander abarbeiten kann.

Solche Informationen speichert Du am besten in eine separate JSON-Datei (JSON-Datei erzeugen und wieder einlesen)
JSON-Object:
Code
var /*Object*/SkriptInfo = { 
[
{inddFile: "Vollständiger Dateipfad:",
toDoes: [
{text2Search: "xyz", style: "StyleName"},
.,
.,
.
]
]
}



Solch ein Objekt kannst Du dann mit zwei verschachtelten Schleifen in Deinem Skript komplett in einem Rutsch abarbeiten.

In etwa so:
äußere Schleife:
Datei öffnen;
innere Schleife:
Begriffe nacheinander suchen und Format zuweisen
äußere Schleife:
Datei speichern

Fehlerbehandlung:
Fehler erkennen, Art und Ort in eine Protokolldatei speichern.

Damit kannst Du [b]nachträglich die Fehler gezielt korrigieren.

Zitat Leider haut er mir ja die formatierungen mit den Skript ChainGREP raus... denn davor sind die Überschriften noch korrekt.

Dazu kann ich ohne konkrete Beispieldatei nichts sagen.

Zitat Gibt es vielleicht die Möglichkeit die formatierung beizubehalten oder im Skript zu sagen "Formatiere mir die gefundenen Texte in "Überschrift DE" wenn dieses Format nicht vorhanden ist, nehme "Überschrift ENG" "Überschrift FR" "Überschrift IT" ... usw.?

Klar, aber besser wäre es, wenn Du gezielt prüfst, ob das gewünschte Format vorhanden ist.

Zitat Ich wende dieses Skript 1x für jede Sprache an und nicht 1x für 24 Sprachen. An sich ist das auch gut so, da ich danach nochmal kontrollieren muss ob nicht zu viel oder zu wenig gelöscht worden ist.


Dann wäre es doch besser, dass das Skript Dir direkt die Ersetzung zeigt, Du das Problem behebst, und das Skript dann weiterläuft.

Zitat if (app.layoutWindows.length == 0) return;


Code
// besser: 
if (app.documents.length > 0){
// erledige, was zu tun ist!
}


Zitat Und wenn wir schon dabei sind... gibt es eine Möglichkeit gefundene Texte zu kopieren?


Klar, lese den Text aus und verwende bei formatierten Text das Textobject mit der Methode duplicate (textObject.duplicate(to, reference)) oder per Zuweisung durch auslesen von contents.

So, ich hoffe, diese Anmerkungen können Dir ein wenig helfen.


als Antwort auf: [#578306]
X