[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