[cstex] Plainovska makra s ConTeXtem - vyreseno
Jaroslav Hajtmar
hajtmar at gyza.cz
Fri Mar 16 14:58:50 CET 2007
Dobry den.
Mnohokrat dekuji panu Marikovi a panu Olsakovi, kterym se podarilo
vyresit muj problem ....
Presne jak psal pan Marik - ConTeXt asi opravdu predefinovava \input.
Kdyz jsem totiz ve zminenem makru - aplikaci scancsv.tex zmenil prikaz
\input na \normalinput (jak radil pan Marik) a zkopiroval do sveho
zdrojaku plainovske makro \dospecials ze souboru plain.tex (jak radil
pan Olsak), tak aplikace zacala fungovat!
Muj zaver :
Puvodni (naprosto nezmenena) aplikace, tak jak byla napsana panem
Olsakem funguje, pokud se do vaseho zdroje dodefinuje plainovske makro
\dospecials, ktere ConTeXt nezna a dale se provede substituce
\let\input=\normalinput.
Makro \dospecials je nadefinovano v souboru plain.tex takto :
\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
\do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
Abych nemusel menit puvodni aplikaci pana Olsaka, udelal jsem nakonec
misto nahrazeni prikazu \input prikazem \normalinput substituci
\let\input=\normalinput, ktera zaruci funkcnost aplikace, nactene
inputem do ConTeXtu. Minimalni zdrojak tedy dle mne muze vypadat napr.
takto:
\setupoutput[pdftex]
\enableregime[cp1250]
\mainlanguage[cz]
\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
\do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}%
\let\input=\normalinput
\input scancsv
\def\printaction{\e[porcis]. \e[jmeno], \e[adresa] \page}
\def\lineaction{\printaction}
\starttext
\scanbase zamestnanci.csv
\stoptext
pricemz prvnich par radku souboru zamestnanci.csv vypada napr. takto :
porcis;jmeno;adresa
1;Bartoň Jan;Polní 20, 789 01 Zábřeh
2;Bíla Věra;Kosov 23, 789 01 Zábřeh
3;Boková Helena;Starobranská 34/345, 111 50 Praha
4;Brožová Marie;U Dráhy 34, 234 56 Zvole
Zatim jsem narazil jen jediny problem ... pri dosazeni strankoveho zlomu
se uplne vlevo dole na uplnem okraji stranky (vlastne mimo tisknutelnou
oblast) objevi (pouze na prvni strance!) pet nul tj. 00000 .... vypada,
ze nekde neco utika do vystupu ... ale nevim co by to mohlo byt,
protoze naprosto stejny zdrojak (upraveny pro plain) zkompilovany v
pdfplainu nic podobneho nedela... (ze by predefinice \input na
\normalinput???)
Jinak pro zajemce o tuto (databazovou) problematiku v ConTeXtu jsem se
na zaklade rady pana Kuly trochu zajimal o reseni vyhradne cestou ConTeXtu.
Reseni existuje docela jednoduche, nicmene i presto se mi libi vice
reseni pana Olsaka. Jeho reseni totiz respektuje to, ze nazvy poli jsou
primo umisteny v CSV souboru a pomoci nazvu poli se da na ne primo
odvolavat (makrem \e[nazevpole] ). V ConTeXtu je nutne pouzivat
promennych #1 - #9, coz omezuje pocet poli se kterymi se da pracovat (i
kdyz pan Olsak v TBN popisuje jak se da pocet parametru zvetsit) a navic
si clovek musi porad pamatovat poradi parametru a pokud se zmeni
struktura SCV souboru tak je to vsechno v pytli, protoze se to cele pak
rozhodi... Pokud by nekdo snad vedel jak by se to dalo udelat jinak tak
budu moc rad, kdyz se ozvete. Zatim predkladam ConTeXtovske reseni jak
jsem jej ziskal experimentovanim :
\setupoutput[pdftex]
\enableregime[cp1250]
\mainlanguage[cz]
\usemodule[database]
\def\MujDopis#1#2#3#4#5#6#7{
{\bf Oznámení výsledků zkoušky : }\crlf
Jméno : #2\crlf
Bydliště : #4\crlf
Vážen#6 pan#7 {\bf #3}, zdravím Vás a posílám Vaše výsledky.
Počet získaných bodů {\bf #5}\par
Pořadí : #1\par
\hfill S úctou Váš {\it Oldřich Skočdopole}\break
\page}
\defineseparatedlist[MujPokus][separator={;},
before=\bTABLE,after=\eTABLE,
first=\bTR,last=\eTR,
left=\bTD,right=\eTD,command=\MujDopis]
\starttext
Jeden způsob použití :
\startMujPokus
1.;Bartoň Jan; Jane Bartoni; Polní 20, 789 01 Zábřeh;34;ý;e
2.;Bíla Věra;Věro Bílá; Kosov 23, 789 01 Zábřeh;32;á;í
3.;Boková Helena;Heleno Boková;Starobranská 34/345, 111 50 Praha;25;á;í
4.;Brožová Marie;Marie Brožová;U Dráhy 34, 234 56 Zvole;12;á;í
\stopMujPokus
Druhý způsob použití - z externího souboru :
\processseparatedfile[MujPokus][zamestnanci1.csv]
% struktura a obsah souboru zamestnanci1.csv je stejny jako o par radku
vyse
% mezi \startMujPokus a \stopMujPokus
\stoptext
Pokud odstranite z makra \defineseparatedlist posledni parametr ...
tj. ,command=\MujDopis tak se misto zneni dopisu vytiskne oramovana
kompletni
tabulka se vsemi daty. Pouziti parametru command=\prikaz je docela
vyvedena vychytavka, nebot se timto zpusobem da definovat nekolik
ruznych zobrazeni dat ConTeXtem ze stejnych databazovych udaju.
BTW: jinak mi pripada, ze se autor reseni v ConTeXtu bud inspiroval
aplikaci pana Olsaka nebo hodne podobne reseni vychazi z podstaty veci...
Jinak pro uplnost - aplikace scancsv.tex, kterou vytvoril pan Olsak ze
sve puvodni aplikace scanbase.tex (ktere resi stejnym zpusobem
zpracovani dat Plainem z napr. MySQL databaze - tj ze souboru, ktery ma
strukturu :
% +------------+------------+----------------------------+
% | zahlavi1 | zahlavi2 | zahlavi3 ... |
% +------------+------------+----------------------------+
% | text 1,1 | text 1,2 | text 1,3 ... |
% | text 2,1 | text 2,2 | text 2,3 ... |
% | text 3,1 | text 3,2 | text 3,3 ... |
% | ... | ... | ... |
% +------------+------------+----------------------------+
%
Myslim ze se to muze nekomu hodit ... Me se to bohuzel nehodilo, protoze
mi zadny z poskytovatelu neposkytuje primy pristup do MySQL databaze
(jen prostrednictvim phpMySQLAdmina). Proto jsem pozadal pana Olsaka,
aby modifikoval svoji aplikaci na zpracovani obecnejsiho tvaru dat tj. :
% "zahlavi1";"zahlavi2";"zahlavi3"; ... "zahlavi-n"
% "text 1,1";"text 1,2";"text 1,3"; ... "text 1,n"
% "text 2,1";"text 2,2";"text 2,3"; ... "text 2,n"
% "text 3,1";"text 3,2";"text 3,3"; ... "text 3,n"
% ...
Uzivatel muze navic po nacteni \input scancsv predefinovat makra \separator
a \obklopeni, pokud jsou v datech polozky a zahlavi oddeleny jinymi
znaky nez strednik a symbol uvozovek.
Tim je makro natolik obecne, ze se urcit bude hodit i nekomu jinemu
... notabene kdyz nyni funguje i v ConTeXtu... :-)
Vsechny zdravim a mnohokrat dekuji vsem za napady, rady a inspiraci -
obzvlaste panum Marikovi a Olsakovi za pomoc pri reseni meho problemu ...
Pekny den preje Jarda Hajtmar
PS: Pokud by snad nekoho napadlo, proc se dole objevuji ty 00000 .. tak
dejte vedet - s tim si nevim rady.
Robert Marik napsal(a):
> Sice context nepouzivam, ale po par pokusech to vypada ze je
> predefinovana sekvence \input.
>
> zkuste v makru \scanbase v souboru scancsv.tex opravit \input na
> \normalinput
>
> minimalne to odstrani chybovou hlasku, jestli se to chova tak jak
> potrebujete, to netusim.
>
> robert marik
>
> Petr Olsak wrote:
>
>> On Thu, 15 Mar 2007, Jano Kula wrote:
>>
>>
>>> Dobrý den!
>>>
>>> Jaroslav Hajtmar wrote:
>>>
>>>> Dobry den.
>>>> Potreboval bych zjistit do jake miry je ConTeXt "tolerantni" k externim
>>>> plainovskym makrum (nacitanym pomoci \input). Predpokladam, ze to asi
>>>> neni z hlediska ConTeXtu prilis zadouci, nicmene presto by mi to moc
>>>> pomohlo. Zkousel jsem neco delat - jednoducha makra ConTeXt
>>>> "zchroustne", ale pri pouziti slozitejsich maker mi ConTeXt neustale
>>>> hlasi nejake chyby. Muzete mi prosim poradit na co je treba si dat pozor
>>>> pripadne v cem muze byt problem pri pouzivani plainovskych maker s
>>>> ConTeXtem?
>>>>
>>> Není to odpověď na otázku, ale ...
>>>
>> Dobrý den,
>>
>> obávám se, že zatím žádný z přispěvatelů neodpověděl na otázku. Odpověď by
>> přitom zajímala i mě.
>>
>> Domnívám se, že šlo o to, aby někdo, kdo má instalovaný ConTeXt (což já
>> nejsem) a rozumí TeXu si například zmíněné makro vyzkoušel a popsal, kde
>> vězí problém. Nebo odkázal na dokument, kde jsou popsány odlišnosti mezi
>> ConTeXtem a plainem, ze kterých by jednoznačně vyplynulo, jak obtížné by
>> bylo plainovské makro pro použití v ConTeXtu předělávat. Z mého pohledu
>> nejde ani tak o toto konkrétní makro (o tuto konkrétní aplikaci), ale o
>> obecný problém "vzdálenosti" mezi ConTeXtem a plainem a možnosti adaptovat
>> věci, které v plainu běží, do ConTeXtu.
>>
>> Je zřejmé, že odpovědi typu "použijte jiný nástroj na řešení Vašeho
>> konkrétního problému" mě osobně neuspokojily.
>>
>> Zdravím
>>
>> Petr Olšák
>>
>>
>>
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>
>
>
>
More information about the csTeX
mailing list