[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