[cstex] Trik k vyreseni rozparsovani retezce?

Jaroslav Hajtmar hajtmar at gyza.cz
Mon Aug 20 01:22:12 CEST 2007


Dobry den.
S ohledem na supertrik, ktery mel v zasobe pan Wagner, bych se pokusil 
pozadat konferenci jeste o jednu vec, se kterou se casto potykam, nebot 
vyuzivam plainTeX a ConTeXt velmi casto ke zpracovavani a sazbe 
databazovych dat (textove databaze z Excelu ve formatu *.CSV).
Zajima mne, zda existuje nejaky zpusob ktery by umoznil zpracovat a 
vyhodnotit  "nevhodne zadane" parametry makra, aniz by doslo k chybove 
hlasce.
Primarne mi jde vlastne o jakesi rozparsovani retezce, ktery neni k 
rozparsovani vhodny.

Ukazal bych to na prikladu :

\def\parsuj#1 #2{1. - #1, 2. - #2}

\def\testA{123 456}
\def\testB{123456}

\expandafter\parsuj\testA % je OK, nebot retezec ma spravny format

\expandafter\parsuj\testB % Tohle da samozrejme chybu, nebot v retezci 
neni mezera oddelujici oba parametry

Chybova hlaska je samozrejme jasna :

Runaway argument?
123456
! Paragraph ended before \parsuj was complete.
<to be read again>
                   \par
l.14

?

Rad bych vedel, zda existuje nejaky jednoduchy trik, ktery by umoznil 
obdrzet
jako vysledek to, ze v pripade, ze neni predavany parametr ve "vhodnem 
formatu",
vyhodnoti to makro tak, ze vyda jako prvni parametr cely retezec a druhy
bude prazdny retezec (nebo retezec nejak predem specifikovany napr. 
\null atp.).


Takze vysledek vyhodnoceni \testA by vypada takto :
1. - 123, 2. - 456

A vysledek vyhodnoceni  \testB by mel vypadat takto :

1. - 123456, 2. - 

\end

Je pravda, ze ted, kdyz mam v ruce moznost testovat vyskyt podretezce v 
retezci pomoci triku, ktery vcera poslal do konfery pan Wagner (viz. makro :

\hledej{jehla}{Je snad jehla v kupce sena?}), muzu samozrejme predem predavany parametr "zkontrolovat" a predat jej pak uz ve spravnem formatu. Taktez bych mohl predem zpracovat a upravit data pomoci PERLu, a pak naservirovat makrum ke zpracovani uz jen "hezky naformatovana" data.

Zajimalo by mne ale, zda by se dalo nejakym vtipnym trikem tuto vec vyresit bud primo TeXem nebo pomoci plainTeXu.


Pro ty kdo by v budoucnu narazili na tento dotaz v archivu a trik s 
kupkou sena neznali jej jeste jednou prikladam na zaver, nebot posilam 
tento mail do konfery s jinym subjectem, takze at je nejaka navaznost)

Vsechny konferniky srdecne zdravim
Jarda Hajtmar


>> \def\nic{}
>> \def\hledej#1#2{%
>>   \def\ifnotfound##1#1##2\konec{\def\test{##2}\ifx\test\nic}%
>>   \ifnotfound#2#1\konec Nenalezeno!\else Nalezeno!\fi}
>>
>> \hledej{jehla}{Je snad jehla v kupce sena?}
>> \hledej{jehla}{Najdi jehlu v kupce sena!}
>>     
>
> To je prekrasny trik - bez cyklu, bez \expandafter a cele v cistem TeXu (ani
> plain ani LaTeX). Proste skvele.
>
> Akorat ted uz nemam motivaci vymyslet vlastni reseni. Ja to tusil, ze nemam
> otevirat slozku cstex konference do doby nez budu mit cas se nad tim zamyslet -
> ale nedalo mi to a ted to mam :-)
>
> Milan Vancura
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>
>
>
>   




More information about the csTeX mailing list