[cstex] Vyplnění dokumentu údaji z databáze (hromadná korespondence)
Jaroslav Hajtmar
hajtmar at gyza.cz
Thu Jul 17 13:09:10 CEST 2008
Dobry den.
Dekuji panu Kubenovi za modifikaci. Upravil jsem podle ni puvodni soubor
pana Olsaka, opravil navod k pouziti pro LaTeX a prejmenoval tento
soubor na scancsv-latex.tex. Zkousel jsem to zbezne a vypada to, ze to
funguje jak ma.
Nyni jsou tedy k dispozici tyto varianty makra pana Olsaka,
zpracovavajici standardni excelovsky format CSV (polozky jsou oddeleny
strednikem) :
1. SCANCSV.TEX - varianta pro plain (tj. jakasi puvodni, kterou pan
Olsak na muj podnet laskave vytvoril z puvodniho makra scanbase.tex).
Makro scancsv.tex je univerzalnejsi obdobou puvodniho makra scanbase.tex
(hlavne moznost menit oddelovace polozek v textove databazi - defaultne
je strednik ale lze pouzit i carku ci cokoliv jineho nevyskytujiciho se
v textu ...)
2. SCANCSV-CONTEXT.TEX - varianta pro ConTeXt. Kterou opet pan Olsak
na muj podnet vytvoril modifikaci sveho plainovskeho makra ... (tusim
nejaka zmena osetreni inputu....)
3. SCANCSV-LATEX.TEX - varianta pro LaTeX. Vznikla modifikaci
plainovskeho makra panem Kubenem. Ja jen tuto modifikaci dal do souboru
scancsv-latex.tex a upravil navod k pouziti a dodelal demo.
Zatimco prvni dve varianty mam odzkouseny v praktickem ostrem provozu uz
nekolik let, posledni variantu berte spis jako neoverenou v ostrem
provozu, takze si netroufam rici, kde muze v budoucnu nastat problem....
Jen jako tip uvadim veci, ktere se mohou hodit - primo z databaze lze
pro kazdy zaznam precist pohlavi a pak podle nej makrem vytvorit vypis
ruznych textu napr:
prospel x prospela, narozen x narozená, uchazec x uchazecka atd... napr.
Oznamujeme Vam, ze \vassyndcera prospel\a.
viz:
\def\a{\if m\e[Pohlavi] \else a~\fi}
\def\aa{\if m\e[Pohlavi]ý\else á\fi }
\def\vassyndcera{\if m\e[Pohlavi]Váš syn\else Vaše dcera\fi }
\def\ka{\if m\e[Pohlavi]\else ka\fi }
Upozornuji na to, ze vyuziti je velmi siroke a ze jsem jej vyuzil kdysi
davno spis pokusne i pro hromadne rozesilani mailu viz.
scancsv-sendmails.zip na adrese
http://public.hajtmar.com/?cesta=JRsVFQdsBhwIWyAdFwQROwY
Doufam, ze budou tyto velmi uzitecne vecicky slouzit nejen panu
Prochazkovi ale i rade dalsich ...
Vsechny varianty najdete zazipovany i s demoukazkami na
http://public.hajtmar.com/?cesta=JRsVFQdsBhwIWzARGB4XMAQ
J.Hajtmar
Jaromír Kuben napsal(a):
> Dobry den.
>
> Jaroslav Hajtmar wrote:
>
>> Dobry den.
>> Doporucuji k tomuto ucelu pouzit makro pana Olsaka "SCANCSV" -
>> pracuji s nim v Plainu a ContExTu uz nekolik let a pro tyto mailmerge
>> aplikace je to naprosto uzasny nastroj. Mam prostrednictvim nej
>> udalany i veci jako napr. tisk vysvedceni, veci pro prijimaci zkousky
>> atd. Ty CSV soubory, ktere uzivam, maji kolikrat i nekolik MB.
>> Bohuzel se mi nepodarilo prijit na to (ted kdyz jsem to na zaklade
>> vaseho dotazu zkousel), zda by se dalo pouzit (byt po nejake uprave)
>> i v LaTeXu.
>>
>> Pokud byste se rozhodl jit nakonec do toho plainu ci contextu, tak
>> jsem pro vas nachystal dve ukazky, jak to funguje - najdete je na
>> http://public.hajtmar.com/?cesta=JRsVFQdsBhwIWzARGB4XMAQ
>>
>> Pokud byste potreboval s touto veci v plainu ci contextu poradit jsem
>> vam k sluzbam, LaTeX moc neovladam a na upravu do LaTeXu si urcite
>> netroufam.
>
> Zda se, ze v LaTeXu je potreba jen osetrit predefinovane makro \input,
> tj. uprava je jednodussi nez v ContExTu.
> Puvodni definice je schovana v \@@input. Ostatni potrebne veci LaTeX ma.
> Po zmene definice makra \scanbase v souboru scancsv.tex nasledujicim
> zpusobem:
>
> \makeatletter
> \def\scanbase #1 {\begingroup \endlinechar=`\^^X
> \edef\maskauvo{\obklopeni####1\obklopeni\separator}
> \edef\maskaneuvo{####1\separator}
> \expandafter\def \expandafter\maskheader \maskauvo
> {\def\itemdata{##1}\runheader}
> \expandafter\def \expandafter\nomaskheader \maskaneuvo
> {\def\itemdata{##1}\runheader}
> \expandafter\def \expandafter\maskitem \maskauvo
> {\def\itemdata{##1}\runitem}
> \expandafter\def \expandafter\nomaskitem \maskaneuvo
> {\def\itemdata{##1}\runitem}
> \edef\scanfirstline
> ##1^^X{\noexpand\scanheader##1\separator\noexpand^^X}
> \def\do##1{\catcode`##1=12 }\dospecials
> \catcode`\ =10 \beginhook
> \expandafter \scanfirstline \@@input #1 \relax^^X\endhook \endgroup}
> \makeatother
>
> jsem soubor demo.tex v podobe
>
> \documentclass{report}
> \usepackage[czech]{babel}
> \usepackage[IL2]{fontenc}
>
> \input scancsv
>
> \def\printaction{
> Jméno: \e[Jmeno], Příjmení: \e[Prijmeni], č.j.: \e[CisJedn]
> \par
> }
>
> \def\lineaction{\printaction} %
>
> \begin{document}
>
> \scanbase demo.csv % musí být mezera za názvem souboru
>
> \end{document}
>
> bez problemu prelozil pdfLaTeXem.
>
> Zdravi
> Jaromir Kuben
>
>>
>>
>> Zdravi J. Hajtmar
>>
>>
>>
>>
>>
>> Procházka Lukáš Ing. - Pontex s. r. o. napsal(a):
>>
>>> Dobrý den,
>>>
>>> řeším specifický problém.
>>>
>>> Mám dopis napsaný v LaTeXu. V něm jsou čtyři pole, která se mají
>>> měnit (říkejme jim např. PAR1, PAR2, PAR3 a PAR4).
>>>
>>> Vedle toho mám textový dokument jako databázi, kde každý řádek
>>> obsahuje tyto čtyři parametry na jednom řádku oddělené oddělovačem
>>> (předpokládejme středník). Řádků v databázi je cca 600.
>>>
>>> A potřebuji tyto hodnoty postupně (po řádcích) načítat, nahrazovat
>>> jimi parametry PAR1-4 (resp. dosazovat za tyto parametry) a .texový
>>> dokument zkompilovat do .pdf. Mělo by tak vzniknout cca souborů
>>> .pdf. (Nebo může vzniknout jeden 600stánkový dokument, to je také
>>> řešení.)
>>>
>>> Pro dokreslení skutečnosti - jde o dopis, ve kterém jsou
>>> parametricky zadávány adresy a další, tj. parametry představují
>>> jméno, adresu, kontaktní telefon a nějaké další údaje.
>>>
>>> Nejsem TeXovsky zdatný programátor - zvládnu pouze primitivní
>>> jednořádkové příkazy bez cyklů a podmínek - proto budu vděčen za
>>> každý námět, jak tuto hromadnou korespondenci vyřešit.
>>>
>>> Požívám TL2007 pod WinXP.
>>>
>>> Předem děkuji.
>>>
>>> Zdravím
>>>
>>> Lukáš Procházka
>>>
>>>
>>> _______________________________________________
>>> 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
>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
More information about the csTeX
mailing list