[cstex] Vyplnění dokumentu údaji z databáze (hromadná korespondence)

Zdenek Wagner zdenek.wagner at gmail.com
Thu Jul 17 13:14:41 CEST 2008


Mam jen obecnou poznamku: k balickum je vhodne napsat anglicky navod a
dat je na CTAN. Pak se dostanou na TeXLive a do MiKTeXu.

2008/7/17 Jaroslav Hajtmar <hajtmar at gyza.cz>:
> 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
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>



-- 
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz


More information about the csTeX mailing list