Mainmenu
Search
   
Scripts : RegExpSearch & Replace    

RegExpSearch: Selektywne wyszukiwanie i zastępowanie / RegExpSearch: Selective search and replace

Problem


Należy wyszukać zwroty zawierający element o stałej strukturze, ale zmiennej zawartości. Na przykład napis:
"Rysunek 3.15. Tu nazwa rysunku..."
w tym wypadku szukana struktura to napis "Rysunek #.##.". Cel może być bardzo różny – możemy chcieć zamienić „suchy” numer na zwrot "Rysunek 15 w rozdziale 3" albo wstawić do tekstu nazwę pliku graficznego. Przyjrzyjmy się temu ostatniemu przypadkowi.
W pewnej książce tłumacz usunął z tekstu wszystkie odsyłacze do plików graficznych, tak więc pozostały jedynie podpisy pod rysunkami.
You need to find phrases containing elements with common structure, but variable content. For instance, expressions like
„Figure 3.15. Image title.....”
in this case you search for structure „Figure #.##.”. Reason for such action may vary – you may want to change „formal” number to phrase „Figure 15 in Chapter 3”, or you may need to insert filename of graphics into the text, for future automatic insertion. Lets look at that last case.
I have worked on the book, where all links to external graphic files where accidentally removed and only captions where left.




Przed każdym podpisem należy zatem wstawić nowy akapit, zawierający nazwę odpowiedniego pliku graficznego. Pliki te mają nazwy w postaci Fnnxxkk.eps, gdzie nn jest numerem rozdziału, zaś kk – numerem ilustracji.I needed to insert new paragraph before each caption, containing filename of accompanying graphics. Filenames use standard of Fnnxxkk.eps, where nn is chapter number and kk is illustration number within a chapter.


Rozwiązanie / Solution


Uruchamiamy skrypt RegExpSearch_CS. W polu kryteriów wyszukiwania wpisujemy sekwencję:
Rysunek ([0-9])\.([0-9])\.
co pozwoli wyszukać wszystkie rysunki o numerach jednocyfrowych (numerami dwucyfrowymi zajmiemy się później). Wyrażenia zawarte w nawiasach staną się zmiennymi, którymi będziemy mogli manipulować później.
Po kliknięciu "Pre-Find" pojawia się lista znalezionych wystąpień:
Start RegExpSearch_CS. In criteria field write
Rysunek ([0-9])\.([0-9])\.
it will search for every picture with single digit number (we take care of dual-digit numbers later). Expressions enclosed in parentheses become variables to use in output.
Click „Pre-Find”. You will see list of possible matches.
If any of the matches is wrong, you may exclude it from former processing, clearing marks in checkbox.




Teraz należy kliknąć "Find" i sprawdzić, czy nie pojawiły się "nadmiarowe" wystąpienia. W tym wypadku akurat każdy tytuł został znaleziony dokładnie raz, co oznacza, że nie ma problemu.Now click „Find” and check, if there are any unwanted hits (for each found string you can see number of hits). In my case every caption were found only ones, so there is no problem.
Otherwise, you should expand title and check for proper hits.




Przełączamy się teraz na zakładkę "Change-Insert". W polu zastępowania wpisujemy sekwencję, która ma wstawić nasze nazwy:
F0$1$xx0$2$.eps
Zapis $n$ oznacza w tym przypadku zmienną z tekstu wyszukiwanego (w odpowiedniej kolejności).
Teraz musimy określić, gdzie ma zostać wstawiony nowy tekst. Do wyboru jest kilka możliwości:
- In a new paragraph before (W nowym akapicie poprzedzającym) – i ten wariant wybierzemy
- At the beginning of the paragraph (Na początku akapitu)
- Insert before found phrase (Wstaw przed znalezioną frazą) – bezpośrednio przed znalezionym tekstem)
- Replace found phrase (Zastąp znalezioną frazę)
- After found phrase (Wstaw za znalezioną frazą)
- At the end of the paragraph (Na końcu akapitu)
- In the new paragraph after (W nowym akapicie po bieżącym)
Now click tab „Change-Insert”. In replacement field, write desired sequence. Used syntax is $n$ for according variable from searched string. In my case replacement sequence is
F0$1$xx0$2$.eps
Next, you have to decide, where replacement text should be placed. There are possibilities:
- In a new paragraph before – I used it in this example
- At the beginning of the paragraph
- Insert before found phrase
- Replace found phrase
- After found phrase
- At the end of the paragraph
- In the new paragraph after


Można również określić styl akapitowy lub znakowy dla wstawianego/zastępowanego tekstu (nie można jednak - na razie - zmienić jednocześnie zarówno stylu akapitowego, jak i znakowego).You can also set paragraph OR character style for inserted/replaced text (but not both character and paragraph style – till now...).




Teraz zostało nam już tylko jedno – kliknąć Start. Rezultat widać na obrazkuWell, almost done. Click Start. The result you can see on image




Czynność trzeba powtórzyć dla ilustracji o dwucyfrowych numerach – w tym przypadku szukany string ma postać:
Rysunek ([0-9])\.([0-9]{2})\.
zaś zastępowany
F0$1$xx$2$.eps

W rzeczywistości, gdyby plik zawierał więcej niż jeden rozdział (a ściślej, gdyby występowały w nim rozdziały 1- i 2-cyfrowe), należałoby analogicznie podzielić również pierwszą część kryterium.
Niewątpliwie znajdzie się bardzo wiele innych zastosowań dla tego mechanizmu – to jest najprostsze i najbardziej oczywiste.
All procedure must be repeated for two-digit image numbers – in that case search string is:
Rysunek ([0-9])\.([0-9]{2})\.
and replacement
F0$1$xx$2$.eps

In fact, if my example contained more chapters, it would be necessary to divide chapter part of the criteria.



Ściągnij / Download RegExpSearch CS1 - TimeTrial


Ściągnij / Download RegExpSearch CS2 - TimeTrial

Posted by dtp on 2005/8/29 18:34:02 (7893 reads)
Printer Friendly Page Send this Story to a Friend

Poster Thread
Anonim
Posted: 2005/11/21 12:12  Updated: 2005/11/21 12:12
 Is there a Macintosh Version ?
I was working on exactly the same sort of script for Indesign, when I discovered that you had already done so = and much better I might add !

However, I don't see any version for the Macintosh. I downloaded the file, and I get this ugly .exe. Hmm, what to do ? Do you have a Javascript version ?

Many thanks for your scripts ! If only I could use them...
-->