[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:
(3735 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
X

Suchen/ersetzen mit Grep per Skript

Hans Haesler
  
Beiträge gesamt: 5826

2. Nov 2017, 17:38
Beitrag # 2 von 10
Beitrag ID: #560317
Bewertung:
(3721 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: 4684

2. Nov 2017, 18:11
Beitrag # 3 von 10
Beitrag ID: #560319
Bewertung:
(3716 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)


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:
(3601 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


als Antwort auf: [#560319]

Suchen/ersetzen mit Grep per Skript

Jabadabadu
Beiträge gesamt: 249

6. Nov 2017, 10:06
Beitrag # 5 von 10
Beitrag ID: #560391
Bewertung:
(3592 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.


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:
(3589 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


als Antwort auf: [#560391]

Suchen/ersetzen mit Grep per Skript

Kai Rübsamen
Beiträge gesamt: 4684

6. Nov 2017, 10:41
Beitrag # 7 von 10
Beitrag ID: #560396
Bewertung:
(3582 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 ;-)


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:
(3578 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


als Antwort auf: [#560396]

Suchen/ersetzen mit Grep per Skript

Hans Haesler
  
Beiträge gesamt: 5826

6. Nov 2017, 11:57
Beitrag # 9 von 10
Beitrag ID: #560409
Bewertung:
(3566 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:
(3551 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.


als Antwort auf: [#560409]
X

Aktuell

InDesign / Illustrator
MTT_300x300_11_2022

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
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!