[cstex] Vyhlledani znaku (retezce) v plainovskem makru po expanzi

Jaroslav Hajtmar hajtmar at gyza.cz
Sat Aug 18 10:04:39 CEST 2007


Dobry den.
Uz se delsi dobu snazim pro jednu aplikaci vyresit tento problem :
Mam v nejake textove databazi udaje a potrebuju odhalit radek, ktery 
obsahuje jistou skupinu znaku (pro jednoduchost by stacil vlastne i 
jeden znak).
Ve skutecnosti jde vlastne o prohledavani textoveho retezce a zjisteni, 
zda tento retezec obsahuje dany znak ci nikoliv.

Vzhledem k mym TeXovskym programatorskym schopnostem jsem hledal v TBN, 
kde vetsinou neco objevim.
Nasel jsem tam ukazku prohledavani retezce vlastne skoro tak jak 
potrebuji (viz. nize), ovsem s tim rozdilem, ze ja potrebuji predat 
makru svuj retezec ve forme nejake "promenne", ktera tento retezec 
obsahuje.
At delam co delam, nedari se mi docilit toho, aby se makro 
\PROHLEDAVANYTEXT uvnitr "forcyklu" expandovalo a tim padem aby se obsah 
promenne prohledaval. Zkousel jsem hledat reseni treba i pomoci 
tokenregistru ale nic se mi nepodarilo. Porad mam totiz velke problemy s 
\expandafter atd...
Existuje prosim vubec nejaka jednodussi moznost pomoci  plainTeXu najit 
vyskyt znaku (ci spis by mi vyhovovalo retezce) uvnitr makra, ktere se v 
prubehu testu prohledava az po expanzi??
Resp. mozna obecneji : Jakym zpusobem lze predat nejakemu makru 
parametr, kterym je nejaka "promenna - makro" nebo tokenregistr, ktery 
se pred zahajenim zpracovani expanduje.
Doufam, ze jsem moc neblabolil ...

Predem diky vsem kdo se timto budou chtit zaobirat
Jarda Hajtmar

Nasleduje minimalni priklad :

%%% viz. TBN [50]

\long\def\for #1#2\endfor{\def\forbody##1{#2}\let\next=\forcycle
   \next #1^^X}
\def\forcycle#1{\if#1^^X\let\next=\relax   
                \else\forbody#1%
                \fi\next}


%\for{ABC123bc}{zpracovávám #1}\endfor


\def\HLEDANYZNAK{S}

\for{A B C S X WWW UXY}{%
        \if#1\HLEDANYZNAK Hledany znak \HLEDANYZNAK\ byl v textu  
\uv{#1}  nalezen\par%
                \else  Hledany znak \HLEDANYZNAK\ nebyl v textu  
\uv{#1}  nalezen\par
        \fi}\endfor 
       

   
% Ja potrebuji zprovoznit toto :

\def\PROHLEDAVANYTEXT{BOSA NOVA}
       
\for{\PROHLEDAVANYTEXT}{%
        \if#1\HLEDANYZNAK Hledany znak \HLEDANYZNAK\ byl v textu  
\uv{#1}  nalezen\par%
                \else  Hledany znak \HLEDANYZNAK\ nebyl v textu  
\uv{#1}  nalezen\par
        \fi}\endfor       


\end




More information about the csTeX mailing list