[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Suchen/ersetzen mit Grep per Skript

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

Suchen/ersetzen mit Grep per Skript

Gaby Leuenberger
Beiträge gesamt: 29

2. Nov 2017, 16:23
Beitrag # 1 von 10
Bewertung:
(1774 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ich versuche in einem Skript mit
Code
app.findGrepPreferences.findWhat = '(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))'; //Tausendertrenner 
app.changeGrepPreferences.changeTo = '$0~<'; // Ersetzungsanweisung

zu ersetzen.

Das funktioniert in der GREP-Suchmaske in InDesign, aber leider nicht, wenn ich das per Skript auslösen will.

Weiss jemand wieso?

Merci für Denkanstösse!
Gruss
Gaby
Gaby Leuenberger
Hier Klicken X

Suchen/ersetzen mit Grep per Skript

Hans Haesler
  
Beiträge gesamt: 5669

2. Nov 2017, 17:38
Beitrag # 2 von 10
Beitrag ID: #560317
Bewertung:
(1760 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

wie sieht Dein Testdokument aus?

Mit den Suchen/Ersetzen-Mustern funktioniert es hier weder per Dialog noch mit einem Script.

Doch wenn ich den Lookahead zu Beginn rausnehme, klappt es mit beiden Methoden:

Code
app.findGrepPreferences.findWhat = "([0-9])(?=(?:[0-9]{3})+(?![0-9]))"; // Tausendertrenner  
app.changeGrepPreferences.changeTo = "$0~<"; // Ersetzungsanweisung

app.documents[0].changeGrep();

In der Textkette "test 1234567 test" werden zwei Tausendertrenner eingefügt.

Gruss, Hans


als Antwort auf: [#560315]

Suchen/ersetzen mit Grep per Skript

Kai Rübsamen
Beiträge gesamt: 4585

2. Nov 2017, 18:11
Beitrag # 3 von 10
Beitrag ID: #560319
Bewertung:
(1755 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

In einer GREP-Welt außerhalb von InDesign ist es je nach Library auch möglich, an gefundenen Positionen etwas einzufügen. In InDesign braucht es aber mind. 1 Zeichen.

Verhalten CS6: Weder "Ändern" noch "Alle ändern" ersetzt etwas
Verhalten CC2017: "Ändern" ersetzt, "Alle ändern" ersetzt nichts

Das Verhalten von CC2017 macht für mich keinen Sinn u. ich rate, dass die Skriptingengine nach wie vor ein Zeichen braucht.

Dein längerer GREP liese sich demnach besser so schreiben:
(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))
(?<=\d)(?=(\d{3})+(?!\d))
(?<=\d)(?=(\d{3})+\b)
\d(?=(\d{3})+\b)

und per Skript dann so:
\\d(?=(\\d{3})+\\b)

Gruß Kai Rübsamen


als Antwort auf: [#560317]

Suchen/ersetzen mit Grep per Skript

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2017, 09:27
Beitrag # 4 von 10
Beitrag ID: #560387
Bewertung:
(1640 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen ihr Lieben!

Verzeiht meine späte Antwort, ich war am Freitag nicht mehr bei der Arbeit.

Habt vielen Dank für eure Rückmeldungen, vor allem, dass in CC 2017 alle ändern und einzeln ändern nicht gleich funktioniert, erklärt dann doch einiges. Die Problematik der vielen regex-Flavors kenne ich, habe aber noch immer nicht genau herausgefunden, zu welchem die ID-Engine eigentlich passt. Vielleicht weisst du das, Kai?

Mein eigentlicher GREP ist ursprünglich wesentlich komplexer und löste das anders, es ging mir hier nur um die Problematik der Ersetzung, die ja Kai erklärt hat.

Was ich tatsächlich alles zusätzlich abfangen sollte, ist Folgendes:
- Tausendertrenner mit Apostroph oder Leerschlag zu Achtelgeviert (Apostroph ist schmerzfrei, der Leerschlag macht Ärger, siehe unten)
- Kein Tausendertrenner für vierstellige Zahlen (Ausschliessen geht schlecht, im Moment versuch ich, das hinterher zu korrigieren)
- Kein Tausendertrenner in ISBN-Nummer, die fünf Stellen haben (das geht mit negativem Lookaround für Divis vor und nach dem Match)
- Zahlen mit Nachkommastellen matchen, aber dort keine Tausendertrenner einfügen (geht auch mit einem lookaround)
-

Der GREP mit den Wortgrenzen reicht mir so also nicht. Mein allergrösstes Problem bleiben aber Zeitschriften-Verweise, die mit "Jahr Seitenzahl" zitieren; weil die i.d.R. durchs Jahr durchpaginieren, hat es da oft dreistellige Seitenzahlen, was mir natürlich zusammen mit dem Jahr alles zerschiesst. Ein Lookbehind mit den Zeitschriftenabkürzungen funktioniert nicht (es sind viele, und die Abkürzungen sind unterschiedlich lang).

Bis auf die Zeitschriften mit dreistelligen Seitenzahlen funktioniert das hier eigentlich gut (Regex-Baum wollte ich anhängen, aber es geht nicht):

Code
app.findGrepPreferences = NothingEnum.nothing;  
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '((?<!-)\\d\\d(\\p{Z*}|\')?(?=((?:\\d\\d\\d(?:\\p{Z*}|\')?)+)(?!\\d))(?<!\\d,\\d\\d|\\d\\.\\d\\d)|\\d(\\p{Z*}|\')?(?=(\\d\\d\\d(\\p{Z*}|\')?){2,}(?!\\d))(?<!\\d,\\d\\d|\\d\\.\\d\\d))';
// Match fünf
app.changeGrepPreferences.changeTo = '$1~<'; // Ersetzungsanweisung
var _ziff1 = app.activeDocument.changeGrep();
$.bp();
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '(\\d)(?:\'|\\p{Z*})(\\p{Z*}\\d)'; // Tausenderabstand, Korrektur der Fehler
app.changeGrepPreferences.changeTo = '$1$2'; // Ersetzungsanweisung
var _ziff1a = app.activeDocument.changeGrep();

app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '(?<!\\d)(\\d){1}(?:\'|\\p{Z*})(\\d{3})(?!(,|\\p{Z*})?\\d)'; // Tausenderabstand, Korrektur vierstellige
app.changeGrepPreferences.changeTo = '$1$2'; // Ersetzungsanweisung
var _ziff1b = app.activeDocument.changeGrep();

app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;


Ich werde wohl oder übel noch was austüfteln müssen, um die Zeitschriften-Abkürzungen zu matchen und dann die Jahreszahlen zu korrigiern, es sei denn, von euch hat noch wer eine zündende Idee...

Liebe Grüsse
Gaby Leuenberger


als Antwort auf: [#560319]

Suchen/ersetzen mit Grep per Skript

Jabadabadu
Beiträge gesamt: 223

6. Nov 2017, 10:06
Beitrag # 5 von 10
Beitrag ID: #560391
Bewertung:
(1631 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,

nur eine "kurze" Bemerkung: die Einbindung von GREP zur Gliederung von ISBN würde ich nicht vornehmen; denn es gibt 2- bis 6-stellige Verlagskennziffern (im deutschsprachigen Raum alles nach 978-3-), die abhängig von dieser Ziffernfolge dann dementsprechend reduzierte Buchnummern und die Prüfziffer besitzen, um schließlich eine 13-stellige Ziffernfolge zu besitzen. GREP alleine kann nicht entscheiden, ob das jetzt ein Verlag mit großer Titelausschüttung (kleine Verlagskennzahl, hohe Buchnummerierung) oder ein Kleinverlag mit höchstens 100 möglichen Nennungen ist. Einzig die Prüfziffer ist lösbar von der Zahlenfolge, eventuell noch die ersten drei Ziffern, wenn es sich um ISBN-13 handelt.
Viele Grüße

Jörn aka Jabadabadu

———————————————————————————————
Dr. Jörn Kobes @ www.computus-druck.com
Win 8/Win 10 — Creative Suite 2, 4, 5.5, 6, CC 2015.4, CC 2017
———————————————————————————————


als Antwort auf: [#560387]

Suchen/ersetzen mit Grep per Skript

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2017, 10:10
Beitrag # 6 von 10
Beitrag ID: #560392
Bewertung:
(1628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moinmoin Jörn

Danke für den Hinweis, aber das tue ich auch nicht. Mir geht es bei diesem GREP nur darum, eben bei fünf- oder sechstelligen ISBN-Gruppen NICHT ein Achtelgeviert reinzumachen :)

Es gibt aber sehr zuverlässige GREPs, um ISBN-10 oder -13 zu erkennen und auszulesen, falls du das je benötigen solltest.

Schöne Grüsse
Gaby
Gaby Leuenberger


als Antwort auf: [#560391]

Suchen/ersetzen mit Grep per Skript

Kai Rübsamen
Beiträge gesamt: 4585

6. Nov 2017, 10:41
Beitrag # 7 von 10
Beitrag ID: #560396
Bewertung:
(1621 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

Antwort auf: Die Problematik der vielen regex-Flavors kenne ich, habe aber noch immer nicht genau herausgefunden, zu welchem die ID-Engine eigentlich passt. Vielleicht weisst du das, Kai?

Das ist die Perl-Bibliothek mit leichten Veränderungen.

Ansonsten: Du solltest zumindest für das Forum deinen GREP kürzer schreiben und viell. eine idml zum testen mitliefern. Lange GREPs lesen und noch ein Beispiel selber bauen, mag hier keiner ;-)

Gruß Kai Rübsamen


als Antwort auf: [#560392]

Suchen/ersetzen mit Grep per Skript

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2017, 10:55
Beitrag # 8 von 10
Beitrag ID: #560398
Bewertung:
(1617 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai

Danke für den Hinweis und bitte entschuldige, ich wollte den Regex-Baum des Regex-Buddy mitschicken, aber Dateien anhängen können nur Member :-( (oder ich bin zu blöd dafür, ich kann hochladen, aber nirgends speichern); insofern geht auch eine .idml-Datei wohl nicht.

Aber hier ein Beispiel, wogegen ich teste, halt als Code eingefügt:

Code
ISBN 978-3-7272-8180-8  
ISBN 978-3-03751-914-1
70909874594950394
etwa 5 000 000 CHF
Aber 1 000 000,95 EUR
1000 CHF
3.14276
ARV 2017 423 ff.;
SJZ 2003 77,
GesKR 1988 5 f.
125000
32'855
12. Oktober 2017
1.000
22.01.2015


"Etwa" und "aber" vor den Zahlen habe ich jetzt eingefügt, um meinen Korrektur-GREP für Zeitschriftenjahrgänge zu testen, aber hier fehlt noch ein Puzzlestück:
Code
(([\u\l]{1,5}\s))(?<!\d)(?:(\d)\s(\d{3}))(?=(\s\d{3}){1}(?!(CHF|EUR|Fr\.)) 


macht auch die Euro-Beträge mit Cent. Ich muss noch schauen, wo der negative Lookahead genau hin soll, dass es funktionert.

Merci und Gruss
Gaby
Gaby Leuenberger


als Antwort auf: [#560396]

Suchen/ersetzen mit Grep per Skript

Hans Haesler
  
Beiträge gesamt: 5669

6. Nov 2017, 11:57
Beitrag # 9 von 10
Beitrag ID: #560409
Bewertung:
(1605 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gaby,

Zitat (...) aber Dateien anhängen können nur Member :-(

Dieses Problem kann gelöst werden :-): http://www.hilfdirselbst.org/...amp;read_category=31

Gruss, Hans


als Antwort auf: [#560398]

Suchen/ersetzen mit Grep per Skript

Gaby Leuenberger
Beiträge gesamt: 29

6. Nov 2017, 13:43
Beitrag # 10 von 10
Beitrag ID: #560421
Bewertung:
(1590 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Schon klar Hans, schon klar :-)

Inzwischen hab ich übrigens auch noch die Lösung für die Zeitschriftenjahrgänge, falls für die sonst noch jemand Verwendung findet, hier im ganzen Tausendertrenner-Korrekturpaket:
Code
app.findGrepPreferences = NothingEnum.nothing;  
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '((?<!-)\\d\\d(?:\\p{Z*}|\')?(?=((?:\\d\\d\\d(?!-)(?:\\p{Z*}|\')?)+)(?!\\d))(?<!\\d,\\d\\d|\\d\\.\\d\\d)|(?<!-)\\d(?:\\p{Z*}|\')?(?=(?:\\d\\d\\d(?!-)(?:\\p{Z*}|\')?){2,}(?!\\d))(?<!\\d,\\d\\d|\\d\\.\\d\\d))';
// Matcht ab fünfstelligen oder grösseren Zahlen die Tausenderziffer [mit und ohne Kommastellen, mit und ohne (falsche) Tausendertrenner]
app.changeGrepPreferences.changeTo = '$1~<'; // fügt ein Achtelgeviert ein nach der Tausenderziffer
var _ziff1 = app.activeDocument.changeGrep();

app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '(\\d)(?:\'|\\p{Z*})(\\p{Z*}\\d)'; // Tausenderabstand, Korrektur der Fehler
app.changeGrepPreferences.changeTo = '$1$2'; // Ersetzungsanweisung
var _ziff1a = app.activeDocument.changeGrep();

app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '(?<!\\d)(\\d){1}(?:\'|\\p{Z*})(\\d{3})(?!(,|\\p{Z*})?\\d)'; // Tausenderabstand, Korrektur vierstellige
app.changeGrepPreferences.changeTo = '$1$2'; // Ersetzungsanweisung
var _ziff1b = app.activeDocument.changeGrep();


app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '((?:[a-zA-Z]{1,5}\\p{Z*}))(?<!\\d)(?:(\\d)\\p{Z*}(\\d{3}))(?=(?:\\p{Z*}\\d{3})(?!(?:,\\d\\d)?\\p{Z*}?(?:CHF|EUR|Fr\\.|\\$|€)))'// Korrektur Zeitschriftenjahrgang
app.changeGrepPreferences.changeTo = '$1$2$3'; // Ersetzungsanweisung; ZS, Jahr ohn Tausenderabstand
var _ziff1c = app.activeDocument.changeGrep();


app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '(\\d{4})\\p{Z*}(\\d{3})'// Korrektur Zeitschriftenseite
app.changeGrepPreferences.changeTo = '$1 $2'; // Ersetzungsanweisung, LS statt Achtelgeviert
var _ziff1d = app.activeDocument.changeGrep();


app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;


Danke Kai für den wertvollen Input zur Regex-Engine. Das war hilfreich, um mich von der anderen Lösungsvariante zu befreien und hierzu zurückzukehren. Ich hoffe, die falsch positiven haben sich jetzt erledigt ... (die Hoffnung stirbt zuletzt) ;-)

Einen schönen Tag euch allen wünsch ich.
Gaby Leuenberger


als Antwort auf: [#560409]
Hier Klicken X

Web / SEO

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
13.12.2018 - 20.12.2018

3400 Burgdorf, BE
Donnerstag, 13. Dez. 2018, 09.00 Uhr - Donnerstag, 20. Dez. 2018, 09.00 Uhr

Workshop

Schritt für Schritt: Planen, konzipieren und Umsetzen einer responsiven Website mit Wordpress: Lokalen Server einrichten; Frontend/Backend; Vorgehen Schritt für Schritt bis zur fertigen Site.

2-Tages-Workshop CHF 990.00

Ja

Organisator: PubliCollege GmbH

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

www.publicollege.ch

Websites erstellen mit Wordpress und Elementor Pro
Veranstaltungen
13.12.2018

Impressed GmbH, Hamburg
Donnerstag, 13. Dez. 2018, 10.00 - 10.30 Uhr

Webinar

Wir stellen Ihnen in diesem kostenlosen ca. halbstündigen Webinar das neue Enfocus Switch PDF Review Modul zur Freigabe von PDF-Druckdaten vor. Wir zeigen Ihnen, wie Sie die Lösung in bestehende Enfocus Switch-Workflows einbinden und somit die Freigabeprozesse mit Ihren Kunden erheblich beschleunigen können.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=250

Enfocus Switch PDF Review Modul