[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Absturz bei myDoc.changeText();

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

Absturz bei myDoc.changeText();

Peter Sauseng
Beiträge gesamt: 463

2. Mär 2010, 13:42
Beitrag # 1 von 8
Bewertung:
(3051 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen!

Ich habe mit einem Skript verschiedene Suchen/Ersetzen-Vorgänge automatisiert.

Code
var myDoc = app.documents[0]; 

if (app.documents.length != 0){

var myTextSearch = new Array;
var myTextReplace = new Array;
var i;

// Text-Ersetzungen definieren
myTextSearch[0] = "u?ß"; myTextReplace[0] = "<016F>"; // u?ß wird u mit Ringerl
myTextSearch[1] = "y?ß"; myTextReplace[1] = "<1EF3>"; // y?ß wird y mit Grave
myTextSearch[2] = "v?ß"; myTextReplace[2] = "v<02DA>"; // v?ß wird v mit Ringerl
myTextSearch[3] = "w?ß"; myTextReplace[3] = "w<02DA>"; // w?ß wird w mit Ringerl
myTextSearch[4] = "o?ß"; myTextReplace[4] = "o<02C7>"; // o?ß wird o mit Hatschek

// Zurücksetzen der Suchoptionen
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;

// Optionen einstellen (Groß-/Kleinschreibung beachten!)
app.findChangeTextOptions.caseSensitive = true;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.wholeWord = false;

app.findChangeGrepOptions.includeFootnotes = true;
app.findChangeGrepOptions.includeHiddenLayers = false;
app.findChangeGrepOptions.includeLockedLayersForFind = false;
app.findChangeGrepOptions.includeLockedStoriesForFind = false;
app.findChangeGrepOptions.includeMasterPages = false;

// Text-Ersetzungen ausführen
for (i = 0; i < myTextSearch.length; i++){
app.findTextPreferences.findWhat = myTextSearch[i];
app.changeTextPreferences.changeTo = myTextReplace[i];
app.findTextPreferences.fontStyle = "Regular"; // Zur Zeit sind nur Regular und Italic-Schnitte berücksichtigt
myDoc.changeText();
app.findTextPreferences.fontStyle = "Italic";
myDoc.changeText();
}

var myGrepSearch = new Array;
var myGrepReplace = new Array;
var myGrepTrackingRegular = new Array;
var myGrepTrackingItalic = new Array;

// Grep-Ersetzungen definieren
myGrepSearch[0] = "v(?=\\x{02DA})"; myGrepReplace[0] = ""; myGrepTrackingRegular[0] = -400; myGrepTrackingItalic[0] = -400; // v vor Ringerl: Laufweite -400
myGrepSearch[1] = "w(?=\\x{02DA})"; myGrepReplace[1] = ""; myGrepTrackingRegular[1] = -530; myGrepTrackingItalic[1] = -500; // w vor Ringerl: Laufweite -530 bzw. -500
myGrepSearch[2] = "o(?=\\x{02C7})"; myGrepReplace[2] = ""; myGrepTrackingRegular[2] = -440; myGrepTrackingItalic[2] = -410; // o vor Hatschek: Laufweite -440 bzw. -410
myGrepSearch[3] = "(?<=w)\\x{02DA}"; myGrepReplace[3] = ""; myGrepTrackingRegular[3] = 130; myGrepTrackingItalic[3] = 100; // Ringerl nach w: Laufweite 130 bzw. 100
myGrepSearch[4] = "(?<=o)\\x{02C7}"; myGrepReplace[4] = ""; myGrepTrackingRegular[4] = 30; myGrepTrackingItalic[4] = 6; // Ringerl nach w: Laufweite 30 bzw. 6


// Grep-Ersetzungen ausführen
for (i = 0; i < myGrepSearch.length; i++){
app.findGrepPreferences.findWhat = myGrepSearch[i];
app.changeGrepPreferences.changeTo = myGrepReplace[i];
app.findGrepPreferences.fontStyle = "Regular";
app.changeGrepPreferences.tracking = myGrepTrackingRegular[i];
myDoc.changeGrep(); // Regular

app.findGrepPreferences.fontStyle = "Italic";
app.changeGrepPreferences.tracking = myGrepTrackingItalic[i];
myDoc.changeGrep(); // Italic
}

// Zurücksetzen der Suchoptionen
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "\?ß";
app.findTextPreferences.findWhat = "?ß";

alert ("Alle Ersetzvorgänge durchgeführt! Bitte nach '?ß' suchen, um zu überprüfen, ob noch andere Zeichenkombinationen vorkommen!");
}
else{
alert ("Kein Dokument geöffnet.");
}


Wenn die gesuchten Zeichenkombinationen in einem Text sehr oft (z.B. über 300 mal) vorkommen, stürzt mein InDesign CS3 ab. Bei weniger Fundstellen wird das Skript ordnungsgemäß ausgeführt.
Womit kann das zu tun haben? Es wirkt auf mich, als würde ein Speicher volllaufen.

Gruß, Peter
X

Absturz bei myDoc.changeText();

Martin Fischer
  
Beiträge gesamt: 12684

2. Mär 2010, 14:05
Beitrag # 2 von 8
Beitrag ID: #435175
Bewertung:
(3041 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

möchtest Du mal das Verhalten nach Abstellen des Neuaufbaus der Objekte während der Skriptausführung testen?

Code
app.scriptPreferences.enableRedraw = false; 



als Antwort auf: [#435168]

Absturz bei myDoc.changeText();

Peter Sauseng
Beiträge gesamt: 463

2. Mär 2010, 14:19
Beitrag # 3 von 8
Beitrag ID: #435177
Bewertung:
(3029 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin!

Das Abstellen des Neuaufbaus hat leider keine Änderung bewirkt.

Gruß, Peter


als Antwort auf: [#435175]

Absturz bei myDoc.changeText();

Martin Fischer
  
Beiträge gesamt: 12684

2. Mär 2010, 14:25
Beitrag # 4 von 8
Beitrag ID: #435179
Bewertung:
(3024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Peter,

auch nicht, wenn Du am Ende einen save-Befehl einbaust?

Hast Du einen Anhaltspunkt, bei welchem Ersetzevorgang der Absturz erfolgt?
Bei einer Text- oder bei einer GREP-Suche?
Ggf. solltest Du mal über alert() den jeweilgen Suchstring ausgeben lassen.

Ich glaube, hier fehlt noch ein Backslash zum escapen:
Code
app.findGrepPreferences.findWhat = "\?ß"; 

Aber als Auslöser für den Absturz kommt der nicht in Betracht.


als Antwort auf: [#435177]

Absturz bei myDoc.changeText();

Peter Sauseng
Beiträge gesamt: 463

2. Mär 2010, 14:57
Beitrag # 5 von 8
Beitrag ID: #435186
Bewertung:
(3001 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin!

Ich habe jetzt herausgefunden, dass der Absturz nur bei der Textsuche erfolgt.

Je nach Fundstellen passiert der Absturz nach der 1., 2., 3., 4. oder 5. Textsuche.
Ein fixer Wert ist das aber auch nicht. Manchmal funktionieren 200 Ersetzungen, bei anderen Texten erfolgt der Absturz schon bei 60 Ersetzungen.
Wenn die 5. Textsuche geschafft war, kam auch bei der GREP-Suche kein Absturz mehr.

Deshalb habe ich die Textsuche jetzt durch GREP ersetzt und es klappt alles.

Gruß, Peter


als Antwort auf: [#435179]

Absturz bei myDoc.changeText();

Martin Fischer
  
Beiträge gesamt: 12684

2. Mär 2010, 15:33
Beitrag # 6 von 8
Beitrag ID: #435191
Bewertung:
(2984 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Deshalb habe ich die Textsuche jetzt durch GREP ersetzt und es klappt alles.

Wunderbar!

Interessant, dass GREP hier stabiler wirkt als TEXT.
Hast Du einen Geschwindigkeitsunterschied festgestellt (ist wahrscheinlich schwierig zu messen, wenn ID bei der ersten Variante abstürzt)?

Hast Du den Test mit unterschiedlichen Dokumenten gemacht oder immer wieder am selben großen Dokument?
Es kommt manchmal vor, dass sich irgendwo ein Übeltäter reinschleicht, der einem wie zufällig in die Quere kommt. Deswegen wäre dies noch ein Ansatz, zu prüfen ob ID grundsätzlich (bei verschiedenen Dokumenten) abstürzt, wenn viele TEXT-Ersetzungen vorkommen (was mich wundern würde) oder ob es nur bei bestimmten Textdaten zum Absturz kommt.


als Antwort auf: [#435186]

Absturz bei myDoc.changeText();

Peter Sauseng
Beiträge gesamt: 463

3. Mär 2010, 08:40
Beitrag # 7 von 8
Beitrag ID: #435239
Bewertung:
(2955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Einen Geschwindigkeitsunterschied habe ich nicht festgestellt.

Ich habe das Skript bei unterschiedlichen Dokumenten ausprobiert. Ab einer gewissen Textmenge bzw. Fundstellenmenge erfolgte der Absturz, wobei ich keinen fixen Wert feststellen konnte, ab welcher Menge der Absturz passiert.

Ich habe jetzt noch festgestellt, dass es an den Unicode-Codes mit den Spitzklammern liegt.

Mit

Code
var myDoc = app.documents[0]; 

app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;

app.findChangeTextOptions.caseSensitive = true;

app.findTextPreferences.findWhat = "a";
app.changeTextPreferences.changeTo = "<0101>";
var mySearch = myDoc.changeText();
alert (mySearch.length);


stürzt InDesign ab, wenn nur ein paar kleine "a" im Dokument vorkommen.

Vielleicht kannst Du einmal ausprobieren, ob das bei Dir bzw. in CS4 auch so ist.

Wenn ich statt <0101> das Zeichen "&#257;" (wird hier nicht richtig dargestellt) hineinkopiere, gibt es keinen Absturz und alles wird wie gewünscht ersetzt.

Gruß, Peter


als Antwort auf: [#435191]

Absturz bei myDoc.changeText();

Martin Fischer
  
Beiträge gesamt: 12684

3. Mär 2010, 09:28
Beitrag # 8 von 8
Beitrag ID: #435249
Bewertung:
(2947 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

> stürzt InDesign ab, wenn nur ein paar kleine "a" im Dokument vorkommen.

Oh ja, das kann ich hier für CS3 und CS4 bestätigen!


> Wenn ich statt <0101> das Zeichen "&#257;" hineinkopiere,
> gibt es keinen Absturz und alles wird wie gewünscht ersetzt.

Auch das kann ich bestätigen.

Herzlichen Dank für Deinen Ergebnisbericht.


als Antwort auf: [#435239]
X

Aktuell

Web / SEO / Blockchain / Betriebssystem
switch_22_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/