[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Suchen und Ersetzen in Arrays

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

Suchen und Ersetzen in Arrays

Karsten Lange
Beiträge gesamt: 210

20. Sep 2020, 18:36
Beitrag # 1 von 5
Bewertung:
(27282 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo alle zusammen,

eine vermutlich eher allgemeine Frage zu Java Script als das es etwas mit InDesign zu tun hat.
Ich möchte innerhalb eines Array bei einzelnen/bestimmten Arrayeinträgen im contents Suchen und Ersetzen. Das funktioniert auch im Beispiel 1 und 2 gut, aber wenn das erste Zeichen bei der Suche&Ersetzung involviert ist, ist dieses Zeichen danach (in meinem Beispiel 3 der Buchstabe A) nicht mehr Teil des Arrayeintrags. Der Arrayeintrag wird um die Anzahl der durch die Ersetzung eingefügten Zeichen (in meinem Beispiel ja nur ein Zeichen, dass #) vom Anfang her gekürzt.
Genauso verhält es sich auch, wenn ich Zeichen am Ende des Arrayeintrags hinzufügen möchte (Beispiel 4).
Da ich mich sicher extrem ungeschickt anstelle und es deshalb für euch schwer nachzuvollziehen ist habe ich da mal etwas vorbereitet:

Code
// Folgenden Text in ein InDesign-Dokument einfügen: 
// Beispiel 1: abcDEfgh richtig
// Beispiel 2: abcdefGH richtig
// Beispiel 3: ABcdefgh falsch
// Beispiel 4: abcdefgh falsch


// Code:
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
app.findChangeGrepOptions.includeFootnotes = true;
app.findChangeGrepOptions.includeHiddenLayers = false;
app.findChangeGrepOptions.includeLockedLayersForFind = false;
app.findChangeGrepOptions.includeLockedStoriesForFind = false;
app.findChangeGrepOptions.includeMasterPages = false;
app.findGrepPreferences.findWhat = "(?<=: )[\\l\\u]+";
var _Suche = app.activeDocument.findGrep();

for (i = 0; i < _Suche.length; i++)
{
app.findGrepPreferences.findWhat = "(\\u)(\\u)";
app.changeGrepPreferences.changeTo = "$1#$2";
_Suche[i].changeGrep();
// _Suche[i].contents.replace(/([A-Z])([A-Z])/g, "$1#$2"); // statt der darüberstehenden 3 Zeilen
_Suche[i].pointSize = "20";
alert ("Beispiel " + (i+1) + " nach dem ersetzen:\r" + _Suche[i].contents);
}

// etwas am Ende des Array-Eintrags hinzufügen
_Suche[3].contents = _Suche[3].contents + "###";
_Suche[3].pointSize = "30";
alert ("Beispiel 4 nach dem hinzufügen:\r" + _Suche[3].contents);




Jetzt hatte ich es noch mit replace versucht, aber das Ergebnis verstehe ich gar nicht mehr. Steh wahrscheinlich tief im Wald.


Es grüßt und dankt der ahnungslose Karsten.

(Dieser Beitrag wurde von Martin Fischer am 31. Jul 2024, 01:47 geändert)
X

Suchen und Ersetzen in Arrays

Dirk Becker
Beiträge gesamt: 193

21. Sep 2020, 00:15
Beitrag # 2 von 5
Beitrag ID: #576823
Bewertung:
(27221 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Durch Textänderungen an kleineren Positionen verschieben sich der Text unter den folgenden Treffern. findGrep hat deswegen einen Boolean Parameter für eine umgedrehte Ergebnisliste, sodass man von hinten nach vorne arbeitet: findGrep(true) …


als Antwort auf: [#576822]

Suchen und Ersetzen in Arrays

Karsten Lange
Beiträge gesamt: 210

21. Sep 2020, 18:50
Beitrag # 3 von 5
Beitrag ID: #576831
Bewertung:
(26993 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Becker,

lieben Dank für ihre Antwort, aber ganz ehrlich: Ich nix verstehen. ;-)

app.findChangeGrepOptions.searchBackwards = true; haben sie vermutlich nicht gemeint?

Falls sie Zeit finden dies etwas ausführlicher darzulegen, wäre das ganz großartig, denn das Array von hinten abzuarbeiten "for (i = _Suche.length-1; i >= 0; i--)" hat auch nix gebracht.

Einen schönen Abend wünscht Karsten.


als Antwort auf: [#576823]

Suchen und Ersetzen in Arrays

Martin Fischer
  
Beiträge gesamt: 12891

31. Jul 2024, 02:03
Beitrag # 4 von 5
Beitrag ID: #588637
Bewertung:
(13748 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zum optionalen Parameter true beim findGrep()-Befehl, auf den Dirk hingewiesen hat: findGrep (reverseOrder:Boolean)

findGrep() sucht von vorne nach hinten
findGrep(true) kehrt die Suchrichtung um und sucht von hinten nach vorne.


als Antwort auf: [#576831]

Suchen und Ersetzen in Arrays

Thomas Richard
Beiträge gesamt: 19444

31. Jul 2024, 12:34
Beitrag # 5 von 5
Beitrag ID: #588638
Bewertung: |||
(13694 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: lieben Dank für ihre Antwort, aber ganz ehrlich: Ich nix verstehen. ;-)


Dein Problem entsteht in der Modifikation des gesuchten Strings von vorne her, dadurch versetzt es die Positionszählung die von vorne beginnt.

Was gemeint ist, ist die Suche in der normalen Richtung aber das Abarbeiten der Treffer von hinten her, so dass keine Verwerfungen im Abzählen/Lokalisieren der Fundstellen entstehen.


als Antwort auf: [#576831]
X