[cstex] Boj s expandafter
Jaroslav Hajtmar
hajtmar at gyza.cz
Thu Jun 25 18:29:48 CEST 2015
Dobrý den.
Díky oběma za rychlé a inspirativní rady a vysvětlení fungování...
Nakonec jsem to v ConTeXtu zprovoznil tímto způsobem (viz minimalni
ukazka v plainu):
%
---------------------------------------------------------------------------------------------------------------------------------------------------
\def\maskapredmetuzhlavickycsvsouboru#1:#2:#3:#4!{#2} % Maska pro
odfiltrování nepotřebných informací
\def\hlavickasloupcespredmetem{CJL:Cesky jazyk a literatura:P:1} %
Informace z jednoho sloupce hlavičky CSV souboru
\def\recurselevel{24} % normálně interní makro ConTeXtu, které je
naplňováno v průběhu cyklu \dorecurse
\def\csvcell[#1,#2]{\hlavickasloupcespredmetem} % Toto makro je
definováno v externí knihovně a načítá data přímo z externího CSV souboru.
\def\vyhodnocenypredmet{\edef\predmet{\csvcell[\recurselevel,0]}\expandafter\maskapredmetuzhlavickycsvsouboru\predmet!}
Z hlavicky: "\hlavickasloupcespredmetem" se vyextrahuje udaj:
"\vyhodnocenypredmet".
\end
%
---------------------------------------------------------------------------------------------------------------------------------------------------
Kompiloval jsem to luaplainem (a svoji knihovní verzi ConTeXtem) a zdá
se, že je vše OK.
Ještě jednou díky a jsem s pozdravem.
Jarda Hajtmar
PS: jen aby zvědavci věděli k čemu jsem to potřeboval - možná to někoho
zaujme:
Procházím ConTeXtovým skriptem celý CSV soubor s klasifikací žáků
(export z MySQL databáze), a pro každý řádek udělám to, že prohledám v
cca 20 sloupcích informaci o tom, zda byl student z daného předmětu
klasifikován (tj. známka) či nikoliv (znak N).
Pokud je ve sloupcích "N", tak z hlavičky souboru vyčtu z kterých
předmětů je student neklasifikován a přidám tento předmět do seznamu
neklasifikovaných předmětů. Konečným výsledkem prohledání cca 400 řádků
CSV tabulky je soupiska, se jmény studentů, kteří jsou aspoň z jednoho
předmětu neklasifikováni a následně u těchto studentů vypíšu i seznam
všech předmětů, z nichž jsou neklasifikováni. Původně jsem tuto agendu
dělal pomocí Perlovského skriptu, nyní si vystačím jen s ConTeXtem.
J.
Dne 25. 6. 2015 v 7:35 Jan Sustek napsal(a):
> Ahoj Jardo,
>
> Zkus napsat
>
\expandafter\expandafter\expandafter\neklasifikovanypredmet\csvcell[\recurselevel,0]
>
> Při expanzi prvního \expandafteru se expanduje treti a ten expanduje
\csvcell... na \cestina. Dostavame
> \expandafter\neklasifikovanypredmet\cestina
> Pri expanzi tohoto \expandafteru se expanduje \cestina na CJL:Český
jazyk a literatura:P:1. Dostavame
> \neklasifikovanypredmet CJL:Český jazyk a literatura:P:1
> a to uz je v poradku.
>
> Zdravi
>
> Honza
>
>
> ---------- Původní zpráva ----------
> Od: Jaroslav Hajtmar <hajtmar at gyza.cz>
> Komu: csTeX at cs.felk.cvut.cz
> Datum: 25. 6. 2015 5:17:51
> Předmět: [cstex] Boj s expandafter
>
> Dobrý den.
> Zdravím všechny konferenčníky.
>
> Opět jsem narazil na problém s expanzí (ve složitějších případech
je to
> můj věčný boj).
> Původně jsem to chtěl řešit na úrovni Lua, ale nakonec mi to nedalo a
> rád bych udělal TeXtové řešení.
>
> Zde je minimální příklad mého problému:
>
>
> %
>
---------------------------------------------------------------------------------------
>
> \def\neklasifikovanypredmet#1:#2:#3:#4{#2} % maska
>
>
> \def\cestina{CJL:Český jazyk a literatura:P:1} % informace z jednoho
> sloupce hlavičky CSV souboru
>
> \def\recurselevel{24} % normálně interní makro ConTeXtu, které je
> naplňováno v průběhu cyklu \dorecurse
> \def\csvcell[#1,#2]{\cestina} % makro \csvcell je definováno v
externí
> knihovně. Slouží k načítání dat z externího CSV souboru. (řádek,
sloupec)
>
>
> \expandafter\neklasifikovanypredmet\cestina -- OK
>
>
> % a zde chyba paragraph ended before \neklasifikovanypredmet was
complete:
> \expandafter\neklasifikovanypredmet\csvcell[\recurselevel,0]
>
>
> \end
>
>
>
> %
>
---------------------------------------------------------------------------------------
>
>
> Můžete mi, prosím, někdo poradit, jak tu informaci z makra \csvcell
> dostat ven :-) ?
>
> Díky a jsem s pozdravem pěkného dne všem účastníkům konfery.
>
> Jarda Hajtmar
>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> https://lists.felk.cvut.cz/mailman/listinfo/cstex
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> https://lists.felk.cvut.cz/mailman/listinfo/cstex
More information about the csTeX
mailing list