[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