[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Zeichenformat ersetzen (CS4, WIN, JS)

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

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

3. Jun 2011, 09:39
Beitrag # 1 von 23
Bewertung:
(5625 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich möchte gerne ein bestimmtes Zeichenformat durch ein vorhandenes Zeichenformat ersetzen.
Dies soll aber nicht über FindChangeByList geschehen.

Wie kann ich das direkt mit einem kleinen Script lösen?

Über Hilfe freue ich mich.

Gruß
Christoph
X

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

3. Jun 2011, 10:30
Beitrag # 2 von 23
Beitrag ID: #472988
Bewertung:
(5609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Zitat Dies soll aber nicht über FindChangeByList geschehen.



Neugierige Frage: Warum eigentlich nicht?

Aber die Antwort auf Deine Frage findest Du auch im Programmcode dieses Scripts.

Schau einfach mal die entsprechende Funktion an.


als Antwort auf: [#472981]

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

3. Jun 2011, 11:19
Beitrag # 3 von 23
Beitrag ID: #472991
Bewertung:
(5585 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Werner,

FindChangeByList prüft nicht auf Vorhandensein des Zeichenformats und bricht mit Fehlermeldung ab. Alle anderen Suchen und Ersetzen-Vorgänge bleiben dann unausgeführt.
Nun füge ich hiermit erstmal auf Verdacht das entsprechende Zeichenformat hinzu:

Code
if( app.activeDocument.characterStyles.item( 'ZF' ) == null )    
{
app.activeDocument.characterStyles.add( { name : 'ZF' } );
}



als Antwort auf: [#472988]

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

3. Jun 2011, 11:23
Beitrag # 4 von 23
Beitrag ID: #472992
Bewertung:
(5580 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Chistoph,

dann speichere doch das Skript als Kopie ab und füge Deine Abfrage ein.


als Antwort auf: [#472991]

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

3. Jun 2011, 11:31
Beitrag # 5 von 23
Beitrag ID: #472993
Bewertung:
(5572 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ja, hab das Hinzufügen mit ins FindchangByList Hauptscript eingebaut.

Danke,

auch einen schönen Tag

Christoph


als Antwort auf: [#472992]

Zeichenformat ersetzen (CS4, WIN, JS)

Martin Fischer
  
Beiträge gesamt: 12714

3. Jun 2011, 11:45
Beitrag # 6 von 23
Beitrag ID: #472994
Bewertung:
(5561 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ cwenet ] ja, hab das Hinzufügen mit ins FindchangByList Hauptscript eingebaut.


Nun besteht das Risiko, dass in allen Dokumenten, auf welche Du FindChangeByList.jsx ansetzt, das angegebene ZF angelegt wird, ohne dass Du es dort tatsächlich brauchst.

Hier ein Muster für ein Skript unabhängig von FindChangeByList.jsx:

Code
app.findTextPreferences = app.changeTextPreferences = null; 

app.findTextPreferences.appliedCharacterStyle = get_cs('cs1');
app.changeTextPreferences.appliedCharacterStyle = get_cs('cs2');

app.activeDocument.changeText();

app.findTextPreferences = app.changeTextPreferences = null;


// prüft Vorhandensein eines Zeichenformats mit best. Namen und legt bei Bedarf ein ZF mit diesem Namen an.
function get_cs(cs_name)
{
var cs = null; // Initialisierung der Variable cs
cs = app.activeDocument.characterStyles.itemByName(cs_name);
if (cs == null)
cs = app.activeDocument.characterStyles.add({name:cs_name});
return cs;
}


Ab CS4 ist es möglich, die Überprüfung des Vorhandenseins eines Zeichenformats über die Eigenschaft isValid zu vereinfachen.

Code
function get_cs(cs_name) 
{
var cs = app.activeDocument.characterStyles.itemByName(cs_name);
if (!cs.isValid)
cs = app.activeDocument.characterStyles.add({name:cs_name});
return cs;
}



als Antwort auf: [#472993]
(Dieser Beitrag wurde von Martin Fischer am 3. Jun 2011, 11:49 geändert)

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

3. Jun 2011, 13:16
Beitrag # 7 von 23
Beitrag ID: #473006
Bewertung:
(5518 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

;-)
dann würde ich doch eher diese Funktionalität als zusätzliches Feature der Ersetzungliste einbauen, dann hat man nur ein Skript.


als Antwort auf: [#472994]

Zeichenformat ersetzen (CS4, WIN, JS)

Martin Fischer
  
Beiträge gesamt: 12714

3. Jun 2011, 14:04
Beitrag # 8 von 23
Beitrag ID: #473009
Bewertung:
(5505 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Sache ist komplexer, als es auf Anhieb scheint.

Neben den Zeichen- und Absatzformaten gibt es noch weitere dokumentspezifische Objekte (Farbfelder für Text, Flächen, Konturen; Linientypen ...) die bei den Suchen- und Ersetzenstrings abgefangen werden müssten.
Ferner müsste u.U. auf verschiedene Ersetzungstypen (text, grep) reagiert werden.

Aber mein Killerargument ist dasjenige von oben:

Zitat Nun besteht das Risiko, dass in allen Dokumenten, auf welche Du FindChangeByList.jsx ansetzt, das angegebene ZF angelegt wird, ohne dass Du es dort tatsächlich brauchst.


Jedes Dokument, auf das FindChangeByList.jsx mit entsprechenden Anfragen losgelassen würde, bekäme die entsprechenden Formate/Objekte hinzugefügt.
Egal, ob es nun Sinn machte oder nicht – z.B. wenn das gesuchte Format im Dokument gar nicht vorhanden ist, also gar nicht gesucht zu werden bräuchte.

Man müsste deswegen bei den in der Liste angegebenen Formaten prüfen, ob sie für das Suchen oder für das Ersetzen verwendet werden.

Bei Suche nicht neu anlegen, deswegen vor der Suche prüfen, ob vorhanden.
Wenn nicht, dann Suche gar nicht ausführen.
Und erst dann, wenn der Suchprozeß für sich grünes Licht hat, prüfen, ob ein anderes Format im Ersetzenausdruck benötigt wird und dieses bei Bedarf anlegen …

Da ist es für mich am Ende einfacher, Christoph mit einem zweiten Skriptle zu bedienen, das er ganz gezielt für diesen einen Zweck einsetzen kann.



Grundsätzlich halte ich es jedoch für möglich, FindChangeByList.jsx auf diese Anforderung hin zu erweitern. Ein Projekt mit hohem Lerneffekt. Freiwillige vor!


als Antwort auf: [#473006]
(Dieser Beitrag wurde von Martin Fischer am 3. Jun 2011, 14:13 geändert)

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

3. Jun 2011, 15:03
Beitrag # 9 von 23
Beitrag ID: #473020
Bewertung:
(5487 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich bin nicht Dein Freiwilliger, aber ich denke, es wäre nicht so kompliziert.

Mein Vorschlag bezog sich nur auf das von Dir genannte Problem für Christoph.

Ich habe das Script noch nie benutzt und auch nie solch eine Liste erstellt, aber ich könnte auf die Schnelle zwei Realisierungsmöglichkeiten vorstellen:

1. Möglichkeit:
Ich hänge einfach ein zusätzliches Feld an eine Zeile der Liste, etwa so:
{searchType} {toFind} {toReplace} {scriptOptions} {myOptions}

mit myOptions kann ich im Skript machen was ich will, ich kann es auch einfach ignorieren.

Das wäre eine universelle sehr flexible Möglichkeit, bei Bedarf beliebig ausbaubar.

2. Möglichkeit (mit heißer Nadel genäht!):
ich übergebe im Suchstring ein Sonderzeichen, das ich dann im Skript herausprüfe.

Schadet nicht, wenn die Routine nicht implementiert ist - da wird halt nichts gefunden!.

Christophs Abfrage sieht dann in etwas so aus:
Code
//Loop through the find/change operations. 
do{
myLine = myFindChangeFile.readln();
//Ignore comment lines and blank lines.
if((myLine.substring(0,4)=="text")||(myLine.substring(0,4)=="grep")||(myLine.substring(0,5)=="glyph")){
myFindChangeArray = myLine.split("\t");
//The first field in the line is the findType string.
myFindType = myFindChangeArray[0];
//The second field in the line is the FindPreferences string.
myFindPreferences = myFindChangeArray[1];
//The second field in the line is the ChangePreferences string.
myChangePreferences = myFindChangeArray[2];
//The fourth field is the range--used only by text find/change.
myFindChangeOptions = myFindChangeArray[3];


1. Möglichkeit:
Wenn myFindChangeArray.length>3
wenn myFindChangeArray[4] meine Option enthält
mache ich mein Ding!

2. Möglichkeit:
Wenn myFindChangeArray[1] mein Sonderzeichen enthält
mache ich mein Ding

Code
... 
} while(myFindChangeFile.eof == false);


Alles klar?


als Antwort auf: [#473009]

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

4. Jun 2011, 10:42
Beitrag # 10 von 23
Beitrag ID: #473052
Bewertung:
(5443 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, hallo Werner,

vielen Dank für die ausführlichen Wortmeldungen.
Danke auch für das "Skriptle", Martin.

Hier wird dennoch das Zeichenformat cs1 und cs2 automtisch erstellt auch wenn es nicht benötigt wird.

Hast Du eine Idee?

Gruß
Christoph


als Antwort auf: [#473020]

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

4. Jun 2011, 11:13
Beitrag # 11 von 23
Beitrag ID: #473056
Bewertung:
(5436 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

mal 'ne etwas merkwürdige Frage:

meinst Du nicht existiert oder nicht benötigt?

Für den ersten Fall funktionert Martin's Skript bei mir.

Für den zweiten Fall fehlt dem Skript wohl die notwendige Intuition ;-), wenn ich alles richtig verstanden habe, solltest Du im zweiten Fall das Skript nicht verwenden. ;-)


als Antwort auf: [#473052]

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

4. Jun 2011, 11:24
Beitrag # 12 von 23
Beitrag ID: #473058
Bewertung:
(5434 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ich hab es so verstanden, dass ein vorhandenes Zeichenformat erst dann ersetzt wird, wenn es existiert.
Wenn es nicht existiert, soll es auch nicht erzeugt werden.

Gruss
Christoph


als Antwort auf: [#473056]

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

4. Jun 2011, 12:09
Beitrag # 13 von 23
Beitrag ID: #473059
Bewertung:
(5420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ja, das macht Sinn!

Dann bleibt nur die Frage:

Meinst Du vorhanden in der Zeichenformatlste?

Dann müsste es ja auch nicht erzeugt werden,

oder meinst Du vorhanden im Dokument.

Vermutlich das Letztere, oder?

Dann sieht die Sache in etwas so aus:

Wenn Format im Dokument existiert,
{
Wenn Ersatzformat nicht existiert
{
Richte Ersatzformat ein
Dann führe Suchen- und Ersetzenvorgang aus.
}
}

Das würde aber bedeuten, dass zweimal gesucht würde.

Ich bin nicht sicher, ob sich da der Aufwand lohnt.

Ich habe mir gerade Deine Aufgabenstellung noch einmal angesehen, und mir fällt noch eine zweite Alternative ein:

Nur mal kurz skizziert, die Umsetzung müsstest Du ggf. selbst machen:

Du schriebst in einem früheren Beitrag:
Zitat FindChangeByList prüft nicht auf Vorhandensein des Zeichenformats und bricht mit Fehlermeldung ab.


Versuche doch mal folgendes:

packe die Suchen- und Ersetzenroutine in ein try{}catch{}
Prüfe im catch die Fehlermeldung, und wenn dort das fehlende Format angemeckert wird, richtest Du es einfach ein und rufst die Ersetzen mit den gleichen Parametern noch einmal auf.

Im Ergebnis läufst in einem Dokument für genau jedes fehlende Format einmal in die Fehlerbehandlung, dass sollte problemlos zu verschmerzen sein.

Alles klar?


als Antwort auf: [#473058]

Zeichenformat ersetzen (CS4, WIN, JS)

cwenet
Beiträge gesamt: 1120

5. Jun 2011, 16:11
Beitrag # 14 von 23
Beitrag ID: #473091
Bewertung:
(5344 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ja, ich meinte vorhanden im Dokument.

Ich glaube ich erzeuge es nun doch, damit das Script FindChangeByList damit klar kommt.

Danke Gruß
Christoph


als Antwort auf: [#473059]

Zeichenformat ersetzen (CS4, WIN, JS)

WernerPerplies
Beiträge gesamt: 2723

5. Jun 2011, 16:26
Beitrag # 15 von 23
Beitrag ID: #473092
Bewertung:
(5341 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Christoph,

mein letzter Vorschlag macht doch genau, was Du willst!

Baue einfach try{}catch{} ein.

Für den Fall, dass Du Fragen hast, helfe ich Dir gerne, aber dann brauche ich von Dir Dateien zum Testen:

1. ein Liste mit Deinen Befehlen,
2. eine Datei mit existierenden Such- und Ersetzformat.
3. eine Datei mit fehlendem Suchformat
4. eine Datei mit fehlendem Ersetzformat.


als Antwort auf: [#473091]
X