hilfdirselbst.ch
Facebook Twitter gamper-media
imagica
Beiträge: 14
11. Dez 2013, 14:58
Beitrag #1 von 10
Bewertung:
(2610 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hallo!
ich möchte per script in einem ausgewählte Textrahmen mit GREP bestimmten Text suchen, diesen ausschneiden und in einen neuen Textrahmen einsetzen..

Hat jemand einen Tipp für mich?
Gruß


Code
app.findGrepPreferences = null; 
app.findGrepPreferences.findWhat = "(DIN )?(EN )?( )?\\d+(-)?\\d+";
numberList = app.activeDocument.findGrep(true);

for (i=0; i<numberList.length; i++)
{

}

Top
 
X
Kai Rübsamen  M  p
Beiträge: 4521
11. Dez 2013, 17:45
Beitrag #2 von 10
Beitrag ID: #520881
Bewertung:
(2560 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hallo!

Wenn du etwas ausführlicher beschreiben würdest, was du machen möchtest, gäbe es viell. auch eine Antwort …

1. Wo ist der Sinn das rahmenweise zu machen?
2. Was bedeutet "neuen Textrahmen"?
a) Er ist schon da u. hat einen Namen im Ebenenbedienfeld?
b) Nein, ich sprech den sonstwie an …
c) Er muss erst noch erzeugt werden und soll xy liegen …

Und: Gibt es ein Beispiel-IDML? Vorher/Nachher?
Gruß Kai Rübsamen
_______________________
als Antwort auf: [#520868] Top
 
WernerPerplies
Beiträge: 2201
11. Dez 2013, 18:24
Beitrag #3 von 10
Beitrag ID: #520883
Bewertung:
(2546 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hallo imagica,

wenn ich Dich richtig verstanden habe, macht mein Skript etwas ähnliches:

Weise per Grep Deinen Fundstellen ein eindeutiges Zeichenformat zu.
Erzeuge einen einen Musterrahmen.
Dann erzeugt mein Skript an allen Fundstellen neue Rahmen und setzt bei entsprechender Einstellung den gefundenen Text in den neuen Rahmen ein.
Der Rahmen wird verankert und entsprechend dem Musterrahmen positioniert:

WpsCreateAnchoredFrames – Adobe InDesign Skript zur automatischen Erzeugung verankerter Rahmen

Oder habe ich da etwas falsch verstanden?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING
als Antwort auf: [#520868] Top
 
Martin Fischer  M  p
Beiträge: 11851
11. Dez 2013, 19:00
Beitrag #4 von 10
Beitrag ID: #520888
Bewertung:
(2519 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hallo Marco,

Kai hat Recht.

Wenn die Aufgabenstellung etwas klarer wäre, könnte ggf. auf die eine oder ander fertige Lösung hier in der Skriptwerkstatt oder im Skriptarchiv hingewiesen werden.

Möglicherweise kostet es auch nur 5 Minuten ein vorhandenes Schnipsel auf die konkreten Anforderungen hin anzupassen.

Hast Du Lust, selbst scripten zu lernen?

Wenn es bei Deinem Anliegen z.B. um verankerte Rahmen geht, dann könntest Du in dem alten Thread Verankertes Objekt per Script erzeugen? einen Ausgangspunkt finden.

Oder recherchiere selbst nach verankert anchored o. Ä.

Viele Grüße
Martin
als Antwort auf: [#520881] Top
 
Kai Rübsamen  M  p
Beiträge: 4521
11. Dez 2013, 19:04
Beitrag #5 von 10
Beitrag ID: #520889
Bewertung: ||
(2514 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Ich hab deswegen nachgefragt, weil ich bereits hier sowas ähnliches veröffentlicht habe:
http://www.hilfdirselbst.ch/..._P518330.html#518330

Nach Anpassen von wenigen Zeilen hätte ich schon mal das:
Code
if (app.selection.length == 1 && app.selection[0].constructor.name == "TextFrame") { 
var curSel = app.selection[0];
}
else {
alert ("Prüf mal deine Auswahl!");
exit();
}

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;
// Setzen der Sucheinstellungen
app.findGrepPreferences.findWhat= "(DIN |EN | )\\d+-?\\d+";

// Suchen und Ergebnisse in Variable speichern
var results = curSel.findGrep(true);

// Den Text in einen neuen Rahmen verschieben
for ( var n=0; n<results.length; n++ ) {
var curResult = results[n];
var a = curResult.insertionPoints[0];
var newTf = a.textFrames.add({geometricBounds: [ "0p", "0p", "6mm", "24mm"]});
newTf.appliedObjectStyle = app.activeDocument.objectStyles.itemByName("Marginalien");
curResult.move(LocationOptions.AFTER, newTf.insertionPoints[0]);
}

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;


Evtl. muss im GREP am Schluss noch ein Leerzeichen rein und das mit dem neuen Rahmen ist mir eben nicht klar.
Gruß Kai Rübsamen
_______________________
als Antwort auf: [#520888] Top
 
imagica
Beiträge: 14
12. Dez 2013, 13:21
Beitrag #6 von 10
Beitrag ID: #520932
Bewertung:
(2405 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hallo!

Erstmal großes Danke an alle, nettes Forum!

Das von Kai ist schon (fast) das was ich suche.

Ich erkläre am besten den komplette Hintergrund:

Aufgabe war es, in einem Printwerk einen zusätzlichen Index nur von DIN-Normen zu erstellen, die im Text vorkommen.

Dies habe ich ja schon erfolgreich umgesetzt, bei denen mit GREP den gefundenen DIN-Normen (DIN, DIN EN, EN) ein Zeichenformat zugewiesen wird und dann (mit Hilfe des Scriptes von Martin Fischer) diese automatisch in den Index aufgenommen werden.

Soweit, so gut. Nur dann stehen diese, wenn man den Index generiert an der entsprechenden alphabetischen Stelle.

Z.B:

D
Dämmstoff 62, 64, 70, 144
Deckeneinbauten 91, 177
DIN 4108-1 55, 124, 204

usw.

Da die DIN-Normen aber separat in einem Textrahmen auf einer Seite stehen sollen, wollte ich mit einem Script per GREP nach diesen Normen im erstellten Index suchen, diese dort ausschneiden, und in den neuen Textrahmen einfügen.

Im Prinzip funktioniert das mit dem Script von Kai Rübsamen, nur dort werden die Treffer an der Fundstelle als verankerter Rahmen eingesetzt, Sie sollen aber untereinander (am besten noch sortiert) in einem einzigen Textrahmen untereinander stehen..

Vielleicht kann mir noch jemand einen Tipp geben, wie ich dies am Script ändern muss?

Danke für eure Hilfe!

Gruß Marco



P.S: da fällt mir noch etwas ein, eigentlich würde es ja auch reichen, wenn die Fundstellen von GREP nicht in den Index aufgenommen werden, sondern einfach nur in die Zwischenablage, dann könnte ich diese einfach in meinen gewünschten Textrahmen einfügen, ohne meinen geplanten cut&paste Vorgang....
als Antwort auf: [#520889]
(Dieser Beitrag wurde von imagica am 12. Dez 2013, 13:29 geändert)
Top
 
Kai Rübsamen  M  p
Beiträge: 4521
12. Dez 2013, 14:09
Beitrag #7 von 10
Beitrag ID: #520941
Bewertung:
(2379 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Marco, was soll mit deinen Seitenzahlen passieren?
Mach mal einen Screen vorher / nachher.

Anbei schon mal die nächste Version. Dein Zieltextrahmen auswählen u. über das Ebenenbedienfeld den Namen "ziel" vergeben. Dann Skript starten. Es kann sein, dass der GREP noch nicht ganz passt.

Code
if (app.selection.length == 1 && app.selection[0].constructor.name == "TextFrame") {  
var curSel = app.selection[0];
}
else {
alert ("Prüf mal deine Auswahl!");
exit();
}

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;
// Setzen der Sucheinstellungen
app.findGrepPreferences.findWhat= "(DIN EN |DIN |EN )\\d+-?\\d+.+\\r";

// Suchen und Ergebnisse in Variable speichern
var results = curSel.findGrep(true);

// Den Text in einen neuen Rahmen verschieben
for ( var n=0; n<results.length; n++ ) {
var curResult = results[n];
//~ var str = curResult;
var targetFrame = app.activeDocument.textFrames.itemByName("ziel");
curResult.move(LocationOptions.AFTER, targetFrame.insertionPoints[0]);
}

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#520932] Top
 
Kai Rübsamen  M  p
Beiträge: 4521
12. Dez 2013, 14:21
Beitrag #8 von 10
Beitrag ID: #520944
Bewertung:
(2368 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Wenn es nur um die Normen geht, diese Zeilen tauschen:
Code
app.findGrepPreferences.findWhat= "(DIN EN |DIN |EN )\\d+-?\\d+"; 

Code
    var targetFrame = app.activeDocument.textFrames.itemByName("ziel");     
curResult.move(LocationOptions.AFTER, targetFrame.insertionPoints[-1]);
targetFrame.insertionPoints[-1].contents = "\r";


Das -1 könnte man wohl auch in der o.g. Version noch ändern.
Gruß Kai Rübsamen
_______________________
als Antwort auf: [#520941] Top
 
imagica
Beiträge: 14
12. Dez 2013, 14:31
Beitrag #9 von 10
Beitrag ID: #520945
Bewertung:
(2363 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Hey Kai,

super, es funktioniert so perfekt, wie in Deinem vorherigen Posting, die Seitenzahl soll ja mitgenommen werden!

Noch mal herzlichen Dank, hat mir auch zum Verständnis des scriptens generell geholfen.

Gruß Marco
als Antwort auf: [#520944] Top
 
Kai Rübsamen  M  p
Beiträge: 4521
12. Dez 2013, 15:05
Beitrag #10 von 10
Beitrag ID: #520948
Bewertung:
(2330 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Grep Ergebnis cut&paste


Das freut mich. In der aktuellen Version hab ich noch eine einfache Sortierung drangehängt. Teste mal, ob dir das so reicht.
Code
if (app.selection.length == 1 && app.selection[0].constructor.name == "TextFrame") {  
var curSel = app.selection[0];
}
else {
alert ("Prüf mal deine Auswahl!");
exit();
}

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;
// Setzen der Sucheinstellungen
app.findGrepPreferences.findWhat= "(DIN EN |DIN |EN )\\d+-?\\d+.+\\r";

// Suchen und Ergebnisse in Variable speichern
var results = curSel.findGrep(true);

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;

// Den Text in einen neuen Rahmen verschieben
for ( var n=0; n<results.length; n++ ) {
var curResult = results[n];
var targetFrame = app.activeDocument.textFrames.itemByName("ziel");
curResult.move(LocationOptions.AFTER, targetFrame.insertionPoints[-1]);
}
var curCont = targetFrame.parentStory.contents.split("\r");
curCont.sort();
var newCont = curCont.join("\r");
targetFrame.contents = newCont;

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#520945]
(Dieser Beitrag wurde von Kai Rübsamen am 12. Dez 2013, 15:07 geändert)
Top
 
X