[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