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

"Procházka Lukáš Ing. - Pontex s. r. o." LPr at pontex.cz
Wed Jul 16 15:39:14 CEST 2008


... Děkuji za okomentovaný návod, člověku-laikovi to vnáší světlo do 
problematiky.

Návod zkouším zatím doslovně, protože si netroufám dělat nějaké větší 
zásahy.

Ale zatím to nefunguje bezchybně.

Do přílohy přikládám i soubor Test.tex (hlavní soubor) a "databázi" 
Data.csv. Jelikož ale nevím, jestli přílohy projdou serverem, kopíruji 
obsah i do mailu.

Děkuji za trpělivost a prosím laskavě o další krok v "ladění".

Lukáš Procházka


Test.tex:

\documentclass{article}

\begin{document}

XXX

\def\precti#1;#2;#3;#4;{ooo #1 -- #2 -- #3 -- #4 ppp}

\newread\vstup % rezervujeme si ident
\openin\vstup Data.csv


\read\vstup to \radek


\expandafter\precti\radek;


\newif\ifRadekPrecten
\RadekPrectentrue
\newread\vstup
\openin\vstup jmeno.souboru
\loop
  \ifeof\vstup
    \radekPrectenfalse % konec souboru
  \fi % \ifeof
  \ifRadekPrecten
    \read\vstup to \radek
    \expandafter\precti\radek;
\repeat % ukonci \loop
\closein\vstup


YYY

\end{document}


Data.csv:

AAA;aaa;1;11
BBB;bbb;2;22



Zdenek Wagner wrote:
> 2008/7/16 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>   
>> 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.
>>
>>     
> Nejprve si připravte definici makra, kde budou parametry odděleny
> příslušným oddělovačem (např. středníkem):
>
> \def\precti#1;#2;#3;#4;{... definice ...}
>
> Makro \precti uvidí 4 parametry označené klasicky #1, #2, #3, #4,
> takže s nimi můžete běžně pracovat. Nyní si otevřete vstupní soubor:
>
> \newread\vstup % rezervujeme si identifikátor
> \openin\vstup jmeno.souboru
>
> Řádek nacteme do řídící sekvence \radek příkazem
>
> \read\vstup to \radek
>
> Obsah makra \radek nyní musíme dostat jako parametr makra \precti, tj.
> musí být expandován dříve. Navíc asi není středník na konci řádky,
> musíme jej tedy doplnit při volání makra. Příkaz tedy bude vypadat:
>
> \expandafter\precti\radek;
>
> Konec souboru otestujeme příkazem \ifeof\vstup a vše vložíme do \loop.
> Makro \loop ale požaduje \if bez \else, jenže \ifeof vrací hodnotu
> přesně opačnou. Uděláme si tedy další pomocnou proměnnou typu \if. Vše
> by pak mohlo vypadat nějak takhle:
>
> \newif\ifRadekPrecten
> \RadekPrectentrue
> \newread\vstup
> \openin\vstup jmeno.souboru
> \loop
>   \ifeof\vstup
>     \radekPrectenfalse % konec souboru
>   \fi % \ifeof
>   \ifRadekPrecten
>     \read\vstup to \radek
>     \expandafter\precti\radek;
> \repeat % ukončí \loop
> \closein\vstup
>
> Stačí nadefinovat \precti, aby to s parametry udělalo požadované,
> doplnit \documentclass, \begin{document}, \end{document} a doufat, že
> jsem to z hlavy bez vyzkoušení napsal správně.
>
>   
>> Předem děkuji.
>>
>> Zdravím
>>
>> Lukáš Procházka
>>
>>
>> --
>>
>> Ing. Lukáš Procházka [LPr at pontex.cz <mailto:LPr at pontex.cz>]
>> Pontex s. r. o.      [www.pontex.cz <http://www.pontex.cz>]
>> [pontex at pontex.cz <mailto:pontex at pontex.cz>]
>> Bezová 1658
>> 147 14 Praha 4
>>
>> Tel: +420 244 06 22 38
>> Fax: +420 244 46 10 38
>>
>>
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>>
>>     
>
>
>
>   
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Data.csv
Type: application/vnd.ms-excel
Size: 28 bytes
Desc: not available
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20080716/9d19671a/attachment-0003.xlb>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Test.tex
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20080716/9d19671a/attachment-0003.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LPr.vcf
Type: text/x-vcard
Size: 363 bytes
Desc: not available
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20080716/9d19671a/attachment-0003.vcf>


More information about the csTeX mailing list