PDA

Zobacz pełną wersję : Skrypty InDyka



2pompony
25-08-2015, 20:00
Pochwalony!

Post jest skierowany do DTPowców posługujących się InDesignem w wersji w miarę nie antycznej i mających świadomość, że skrypty ułatwiają życie...

Opiszę problem...

Jak każdy, kto zajmuje się dłuższymi publikacjami których sam nie tworzy tylko dostaje je z wydawnictwa, mam swojego 'killera sekretarek' - zestaw Find/Change querries, które poprawiają większość, jeśli nie wszystkie błędy spotykane w textach pisanych niechlujnie: poprawiają interpunkcję, inteligentnie usuwają white spaces, poprawiają miękkie entery, cudzysłowy, załatwiają wiszące spójniki, skróty, indeksy górne i dolne, i tak dalej, i tak dalej... Spokojnie dostając text przepuszczam go przez tego 'killera sekretarek' i dostaję text, który można w końcu zacząć składać. Mój zestaw, używający intensywnie GREPa ma 9 kroków, tzn. 9 Find/Change querries.

Ale lepsze jest wrogiem dobrego jak powiadają... Dostałem do roboty nie parę plików, które składają się na książkę, tylko serię chyba z osiemdziesięciu maluteńkich pliczków, które w dodatku napisane są wręcz tragicznie, a ja teraz każdy z nich muszę poprawiać. Czyli każdy zaimportowany tekścik muszę przepuścić przez te 9 kroków Find/Change. Nudne...

Oczywiście można to zrobić tak, że położy się je wszystkie w InDyku na stronie, potem połączy ramki w jeden bardzo długi text i poprawi za jednym pociągnięciem - można i tak, i wtedy zamiast 80 x 9 kroków mam 1 x 9 kroków - co robi dużą różnicę. Ale zainteresowałem się skryptem FindChangeByList - który bierze listę tych 9 kroków i za jednym pociągnięciem robi od razu te wszystkie kroki jeden po drugim. Czyli raz puszczasz skrypt, a on po prostu wykonuje automatycznie tyle kroków Find/Change, ile mu się wpisze.

W teorii jest pięknie - wszystko działa. Problemem jest to, że działa za szybko. Tak jest, ZA szybko. Na przykład na jakimś etapie, powiedzmy w trzecim kroku ma usunać wszystkie podwójne, lub wielokrotne spacje. I usuwa podwójne, ale jeśli spacji jest więcej, bywa że jakieś mu zostają - np. było 5 spacji, po skrypcie zostają dwie. Tak jakby skrypt nie wykonawszy do końca swojego kroku przechodził zbyt szybko do następnego kroku.

Macie na ten cały problem jakiś swój sposób? Robicie jakoś inaczej? Czy może przepuszczacie text przez swoje kroki ręcznie?

docxxx
27-08-2015, 10:01
W teorii jest pięknie - wszystko działa. Problemem jest to, że działa za szybko. Tak jest, ZA szybko. Na przykład na jakimś etapie, powiedzmy w trzecim kroku ma usunać wszystkie podwójne, lub wielokrotne spacje. I usuwa podwójne, ale jeśli spacji jest więcej, bywa że jakieś mu zostają - np. było 5 spacji, po skrypcie zostają dwie. Tak jakby skrypt nie wykonawszy do końca swojego kroku przechodził zbyt szybko do następnego kroku.


Absurdalne tłumaczenie. Nie ma czegoś takiego, że skrypt/komputer działa za szybko. Po prostu ten algorytm/skrypt ktory wymysliles nie jest typu zachłannego, tzn. idzie znak po znaku i jesli widzi 5 spacji, a ma usunac podwojne to robi tak:

[**][**]*
i zostaje mu ***

a pewnie chcialbys tak:
[**]***
[**]**
[**]*
[**]
*

Najprosciej, zapusc po prostu ten skrypt ze spacjami n-razy. Przeciez on i tak nic nie zepsuje.
Ja czesto musze poprawic kod na strone www i przepuszczajac go przez Notepad++ klikam Find/Replace tyle razy az zmian bedzie zero.

ps. Z tego co pamietam, to wyrazenia regularne zapuszczone w konsoli linuxa dzialaly metodą zachłanną.

ecml
27-08-2015, 10:13
1. Nie wiem czy wiesz, mogło Ci się gdzieś zawieruszyć, ale w Indesignie można zapuścić skrypt na wszystkich otwartych plikach, nie trzeba więc nic scalać.

2. To co Kolega wyżej napisał to jedno, druga rzecz, że czasem spieprzy się w skrypcie kolejność - np. usuwasz podwójne spacje, a później dodajesz jedną po wszystkich przecinkach. Ja wywalam spacje zupełnie na końcu, do skutku.

2pompony
27-08-2015, 13:08
Absurdalne tłumaczenie. Nie ma czegoś takiego, że skrypt/komputer działa za szybko. Po prostu ten algorytm/skrypt ktory wymysliles nie jest typu zachłannego, tzn. idzie znak po znaku i jesli widzi 5 spacji, a ma usunac podwojne to robi tak:

[**][**]*
i zostaje mu ***

a pewnie chcialbys tak:
[**]***
[**]**
[**]*
[**]
*


NIE, NIE i NIE!

NIE.

Krok nie znajduje dwóch spacji i nei zamienia ją na jedną tak jak piszesz. To jest działanie prostackie i mocno niedokładne; ja chcę finezji, a nie działania kilofem. Krok jakiego używam znajduje wszystkie wielokrotne spacje (i inne white spaces, wszystkie ich typy poza tabulatorami) występujące w dowolnym ciągu na raz wyrażeniem GREP: (\p{Zs}){2,}

W Twoim przykładzie będzie to tak

[***][**][***]* i zamienia to jednokrotnie i na raz na jedną, pojedynczą spację

pod gwiazdkę można podłożyć wszystkie typu 'odstępów poziomych', jak spacje niełamliwe, ułamkowe, flush, pojedyncze o stałe i zmiennej szerokości, em i en - słowem wszystkie odstępy poziome poza tabulatorem, który trzeba traktować oddzielnie, bo jego akurat nie chcemy usuwać

Problemem jest to, że ten krok zapuszczony pojedynczo robi to co ma robić: znajduje cały ciąg wszystkich white spaces na raz i jednorazowo zamienia go na jedna spację. W jednym przebiegu wszystko to robi na raz i w dodatku wyśmienicie.

Ten sam skrypt puszczony w grupie z innymi robi to niechlujnie, jestem ciekaw czemu i jak temu zaradzić.





@ecml
ad 1. Wiem, ze można skrypty zapuścić na wszystkich plikach. Ale ja robię inaczej: każdy plik (powiedzmy będący rozdzialem długiej książki) wkładam do InDesigna i zanim zacznę nad nim pracować poprawiam serią komend w określonej kolejności. Tą kolejność mam przećwiczoną i przemyślaną - jej kolejność jest ustalona i sprawdza się idealnie, jeśli ręcznie ją zapodam. Lubię skończyć pracę nad jednym rozdziałem, zanim zabiorę się za następnym, taki mam model pracy, który mi ułatwia późniejsze ogarnięcie całości.

Jeśli książka ma tych rozdziałów kilka lub kilkanaście, do każdego rozdziału mam na początku pracy 9 komend, po których rozpoczynam właściwą robotę. Niezbyt twórcze, ale do wytrzymania.

Teraz mam książkę, które ma około 80 tych rozdziałów, więc czeka mnie 80 razy ręczne puszczenie 9-ciu komend. Dlatego postanowiłem sobie uprościć i zamiast puszczać ręcznie te 9 komend, chciałem puścić je jedna po drugiej naraz. Skoro sprawdza się idealnie jak zapuszczam je osobno, miało sprawdzić się tak samo dobrze, jak puszczę je ciurkiem za pomocą specjalnego skryptu.

Niestety, ten specjalny skrypt od puszczania ciurkiem coś nie działa, albo działa źle... Pytanei dotyczyło właśnie jego...

ad 2.
Jak już pisałem poprzednio - ja nie usuwam spacji pojedynczo tylko hurtowo, więc nei muszę tego robić w kilku krokach. Jedn krok mi wystarczy. Moim problemem jest to, że jak robię to ręcznie - działa. A jak wywołuję tą komendę skryptem do puszczanie komend ciurkiem - nie działa.





Prościej chyba nei uda mi się wyjaśnić o co mi dzie. Ale dziękuję za chęć niesienia pomocy.

ecml
27-08-2015, 13:42
Skoro piszesz, że skrypt "działa za szybko", to by oznaczało, że pracuje w więcej niż jednym wątku, a tak nie jest.
Problem jest powtarzalny? Skrypt robi źle za każdym razem to samo? Chodzi konkretnie o te wspominane spacje, czy to był tylko przykład?

2pompony
27-08-2015, 14:13
To jest przykład, ale rzeczywisty, skrypt jest powtarzalny. Usuwa wszystkie odstępy poziome (popularnie mówiąc wielokrotne spacje) poza jednym przypadkiem: zostawia jedną spację na początku akapitu, oraz nie usuwa wszystkich zbędnych akapitów, ale z tym sobie już poradziłem. Nie jestem pewien, czy to wszystkie wady, być może jakieś przegapiłem...

Są dwa obejścia, oba mało eleganckie, ale jak będę zmuszony, to tak zrobię.

Pierwsze jest takie, że włożę wszystkie 80 rozdziałów, połączę je w jeden bardzo długi ciąg textu i dopiero wtedy wykonam ręcznie te 9 kroków (przez krok rozumiem pojedyncze Find/Change). Da się, chiociaż takie wstępne łączenie wszystkiego burzy to mój modus operandi i utrudnia w pewnych sytuacjach życie. Niezaprzeczalnym plusem takiego obejścia jest bezpieczeństwo, ponieważ nei zmieniam mozolnie i pieczołowicie ustalonej kolejności moich kroków, czyli jestem pewien że na wyjściu dostanę text bezbłędny, a nie z niespodziankami typu urżnięta kropka po skrócie tu i ówdzie, źle położony nawias, czy coś...

Drugie obejście jest takie, że zmienię nieco kolejność moich kroków. Listę kroków mam od lat przemyślaną i bynajmniej nie jest przypadkowa, bo jak wiesz jedno wpływa na drugie - więc nie chcę jej zmieniać bez wyraźnego powodu. Nie chcę się boleśnie przekonać, że np. usunęło mi lub coś dodało nie tam, gdzie potrzeba, np. kropkę po skrócie dr, w metrach kwadratowych dwójkę dało do indeksu dolnego zamiast górnego lub poknociło z cudzysłowami. Więc mogę krok, w którym usuwam zbędne white spaces sprzed akapitu dać nie na początek listy, tylko gdzieś dalej - chociaż będę musiał gruntownie sprawdzić, czy czegoś to nei zaburza. A to potrwa.

Alternatywnie mogę usuwać tą pojedynczą spację sprzed akapitu w dodanym 10tym już kroku, gdybym był pewny, że to jedyna wada tego skryptu do puszczanie kroków ciurkiem. On się nazywa FindChangesByList.




Liczyłem na to, ze ktoś już zauważył, że w tym skrypcie do ciurka wystarczy gdzie coś poprawić, i zacznie działać po ludzku, ale chyba moje nadzieje były płonne...

2pompony
27-08-2015, 15:13
Dobra, dam se spokój z tym skryptem od puszczania ciurkiem, są inne błędy.

Na przykład ręcznie puszczone Find/Change o składni: Zamień r/{2, } Na \r bierze i zaznacza wszystkie wielokrotne entery za jednym zamachem i zamienia cały ich ciąg na jeden enter. Czyli mówiąc najogólniej usuwa wszystkie zbędne entery, które nawaliła sekretara, zostawiając tylko ten właściwy.

Dokładnie ten sam krok ale puszczony przez skrypt robi to tak, że na każde 10 enterów zostawia dwa. Było 10, to 2 zostawi, będzie 40, zostawi 8 - a przecież składnia Find/Change się nei zmienia - cały czas jest ta sama i cały czas ma zaznaczyć wszystkie entery na raz. A skrypt robi to jakby mu czasu nie starczało na zaznaczenie wszystkich...

Nie mam do tego tego nerwów. Jakby ktoś wiedział jak to poprawić - proszę o poradę, ale chyba zaczynam wątpić...

RobertMiernik
27-08-2015, 15:16
Nie lepiej skorzystać z opcji uruchamiania skryptu dla wszystkich otwartych dokumentów?

Otwierasz wszystkie 80 i uruchamiasz skrypt - i masz bez żadnych 'usprawnień' swoje stare sprawdzone i działające...

2pompony
27-08-2015, 15:24
A to z kolei nie wiem, czy pociągnie mój komputer. Nie otwierałem nigdy 80 plików na raz, ale może spróbuję powiedzmy z dwudziestoma na początek. Rzeczywiście jest to jakieś obejście problemu, zamiast 80 razy puszczać ręcznie, puścić zestaw powiedzmy kilka razy na otwarej dwudziestce, piętnastce może...

Dzięki Robert, jak się okazuje partyzanckie sposoby też - miejmy nadzieję - działają cuda. :)

ecml
27-08-2015, 17:28
Nie wiem czy wiesz, mogło Ci się gdzieś zawieruszyć, ale w Indesignie można zapuścić skrypt na wszystkich otwartych plikach[...]

Nie lepiej skorzystać z opcji uruchamiania skryptu dla wszystkich otwartych dokumentów?


Pompon! Skup się ;p

2pompony
27-08-2015, 19:00
Tak, wiem, nie skupiłem się wystarczająco - bo byłem zbyt pochłonięty tym, żeby skrypt zadziałał tak, jak miał działać. Przyznaję Tobie palmę pierwszeństwa!

W dodatku sam pomysł otwarcie 80 plików i jednoczesne puszczenie na nich wszystkich mojej kwerendy wydawał mi się niedorzeczny - i dalej tak uważam - z tym, że dopiero wpis Roberta uzmysłowił mi, że można sobie otwierać po 15, no może góra dwadzieścia i tym sposobem ułatwić (nieco) życie.

Gdybyś napisał mniej więcej tak: chłopie, odpuść jakieś ulepszające skrypty, bo nigdy to nie działało tak jak powinno i wprowadzają więcej zamieszania niż pomagają, a zamiast tego minimalizuj ilość kliknięć otwierając po 10 plików - zrozumiałbym to już poprzednio.

A tak, nie będąc wystarczająco skupiony zrozumiałem dopiero po czasie. Sorry, na przyszłość przy Twoich wpisach skupię się podwójnie, obiecuję!



Dziękuję obu Wam - co prawda nei była to pomoc o jaką pytałem, ale wyzwolenie się spod wpływu złudzeń też bywa pomocne!