<html><body>Ahoj Jardo,<br><br>na první pohled nevidím, co se v těch konkrétních cyklech přesně děje. Ale mohlo by pomoct expandované addto (napr. \eaddto), kdy se před přidáním do seznamu ten přídavek úplně expanduje.<br><br>\long\def\eaddto#1#2{\edef#1{#1#2}}<br><br>Honza<br><br><p>---------- Původní zpráva ----------<br>Od: Jaroslav Hajtmar <hajtmar@gyza.cz><br>Komu: cstex@cs.felk.cvut.cz<br>Datum: 30. 6. 2015 12:19:47<br>Předmět: Re: [cstex]
 Makra pro práci s textovými řetězci ("připojování" textu)</p><br><blockquote>Dobrý den.<br>Díky pane Olšáku za užitečné řešení. Zatím jsem nic takového <br>nepotřeboval, ale teď se to mi to bude určitě hodit. Když příjde na věc, <br>tak dávám spíš přednost TeXovému řešení před Lua řešením, nicméně limity <br>mých TeXovým možností jsou mnohem níže než Luových, takže mi kolikrát <br>nezbyde nic jiného než to (někdy i zbytečně komplikovaně) obejít v Lua :-).<br><br>Ještě bych v tuto chvíli potřeboval poradit. Zkoušel jsem totiž s makrem <br>\addto experimentovat a když dělám i složitější případy (vkládané <br>řetězce jsou v makrech atd...) zdá se, že vše funguje, jak má.<br>Když ovšem nakonec vložím finálně do makra "\neklpredmety", tak bohužel <br>dojde někde k chybě.<br><br>\def\neklpredmety{%<br>\neklasifikovanyzakfalse<br>\def\NeklPredmety{}<br>\dostepwiserecurse{24}{58}{1}{\if\csvcell[\recurselevel,\linepointer]N <br>\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\recurselevel,0]}, <br>}\neklasifikovanyzaktrue \fi}%<br>\dostepwiserecurse{75}{85}{1}{\if\csvcell[\recurselevel,\linepointer]N <br>\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\recurselevel,0]}, <br>}\neklasifikovanyzaktrue \fi}%<br>}<br><br>Princip je snad zřejmý. Prohledat aktuální řádek a v něm nalézt znaky <br>"N", indikující neklasifikovaný předmět. Pokud najde aspoň jeden, tak <br>nastaví příznak na \neklasifikovanyzaktrue a přidá tento předmět do <br>seznamu neklasifikovaných. (Následně daného žáka vypíše s jeho všemi <br>neklasifikovanými předměty.)<br><br>Nenapadá Vás, prosím, kde je problém? Zdá se, že to zlobí až uvnitř <br>cyklu \dostepwiserecurse{from}{to}{step}{what to do}, kde se v makru <br>\recurselevel vyhodnocuje počet proběhlých cyklů.<br><br>V tuto chvíli nejsem schopen bohužel v plainu připravit (nepodařilo se <br>mi to zrealizovat) nějaký minimální příklad toho, kde se to zasekává, <br>nicméně dolů vkládám aspoň část kódu z něhož snad lze vyjít.<br><br>\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}<br>\def\NeklPredmety{}<br>\def\zkratkapredmetu#1{#1}<br>\def\csvcell[#1,#2]{Ch}<br>\def\row{1}<br>\def\column{3}<br><br><br>\addto{\NeklPredmety}{CjL, }<br>\addto{\NeklPredmety}{M, }<br><br>\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\row,\column]}, }<br><br><br>column: \column<br><br>row: \row<br><br>csvcell: \csvcell[\row,\column]<br><br>\NeklPredmety<br><br><br><br>\bye<br><br><br><br>Díky za případnou radu.<br>Pěkný den přeje<br>Jarda Hajtmar<br><br><br><br><br><br>Dne 30. 6. 2015 v 6:09 Petr Olsak napsal(a):<br>><br>> Dobrý den,<br>><br>> s něčím podobným se musel setkat asi každý. V OPmac je na to <br>> připraveno makro \addto.<br>><br>> V dotazu mícháte dvě věci dohromady: přidávání obsahu do makra <br>> (například pomocí \addto) a otázka návratu hodnoty, tj. užití makra.<br>><br>> Může to vypadat třeba takto:<br>><br>> \long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}<br>> \long\def\jointocontent#1{\addto\mycontent{#1}\mycontent}<br>><br>> \def\mycontent{}    % inicializace<br>> \jointocontent{AAA} % vrátí AAA<br>> \jointocontent{BBB} % vrátí AAABBB<br>> \jointocontent{CCC} % vrátí AAABBBCCC<br>><br>> \bye<br>><br>><br>><br>> On Tue, 30 Jun 2015, Jaroslav Hajtmar wrote:<br>><br>>> Dobrý den.<br>>><br>>> Hledám nějaké TeXové řešení "zřetězování" maker. Jde mi o to, že <br>>> potřebuji v nějakém cyklu provádět test a v případě vyhovujícího <br>>> výsledku potřebuji připojit nějaký text k obsahu stávajícího makra. <br>>> Něco jako tohle:<br>>><br>>> \def\jointocontent{} % inicializace<br>>> \jointocontent{AAA} % vrátí AAA<br>>> \jointocontent{BBB} % vrátí AAABBB<br>>> \jointocontent{CCC} % vrátí AAABBBCCC<br>>><br>>><br>>> Pokoušel jsem se najít nějaké řešení. Něco šlo najít pod hesly jako <br>>> concatenate atd... Něco jsem našel ale nic z toho nesplňovalo moje <br>>> představy. Jde to vůbec v principu nějak rozumně udělat? Opět avizuji <br>>> svůj osobní problém s vícenásobnou expanzí atd... :-)<br>>><br>>> Upozorňuji na to, že pomocí Lua jde snadno udělat něco v tomto duchu:<br>>><br>>> \savetomybuffer{} % inicializace<br>>> \addtomybuffer{AAAA} % připojení AAA<br>>> \addtomybuffer{BBB}<br>>> \addtomybuffer{CCC}<br>>><br>>> \getcontentofmybuffer % vrátí AAABBBCCC,<br>>><br>>> ale jde mi spíš o principiální řešení přímo na úrovni TeXu.<br>>><br>>> Nepotkali jste se s něčím podobným?<br>>> Díky a jsem s pozdravem pěkného nadcházejícího dne.<br>>> Jarda Hajtmar<br>>><br>>><br>>><br>>><br>>><br>>><br>>> _______________________________________________<br>>> csTeX mailing list<br>>> csTeX@cs.felk.cvut.cz<br>>> https://lists.felk.cvut.cz/mailman/listinfo/cstex<br>>><br>>><br>><br>><br>> _______________________________________________<br>> csTeX mailing list<br>> csTeX@cs.felk.cvut.cz<br>> https://lists.felk.cvut.cz/mailman/listinfo/cstex<br><br>_______________________________________________<br>csTeX mailing list<br>csTeX@cs.felk.cvut.cz<br>https://lists.felk.cvut.cz/mailman/listinfo/cstex</blockquote></body></html>