[cstex] Vyplnění dokumentu údaji z databáze (hromadná korespondence)
Jaromír Kuben
kuben at scova.vabo.cz
Thu Jul 17 11:33:51 CEST 2008
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
More information about the csTeX
mailing list