Hi all, I have to write a letter to a few dozens candidates in which some parts are not identical. I may have the list of the persons, and the changing part for each of them in a file (named for instance "list-of- candidates.tex") on which each line corresponds to one person and the fields are sperated by commas (or any other suitable character). What would be the best way of coding this in ConTeXt? Here is the example I have in mind: %%% begin the body of the letter Dear \MmeOrSir\ \FirstName\ \FamilyName, We have received your application and we thank you for your interest in our institution. \AnswerToApplication. With our best regards, etc… %%% end the body of the letter The four commands \MmeOrSir, \FirstName, \FamilyName, \AnswerToApplication should correspond to the columns 1 through 4 of each line of the file "list-of-candidates.tex" as follows: %%% begin list-of-candidates.tex Madam , Joan , of Arc , {You will be interviewed very soon} Mr , Groucho , Marx , {We are sorry, but this position is only for non smoking candidates} \endinput %%% end list-of-candidates.tex Thank you for help: OK
Am 10.05.2009 um 14:32 schrieb Otared Kavian:
Hi all,
I have to write a letter to a few dozens candidates in which some parts are not identical. I may have the list of the persons, and the changing part for each of them in a file (named for instance "list- of-candidates.tex") on which each line corresponds to one person and the fields are sperated by commas (or any other suitable character). What would be the best way of coding this in ConTeXt?
Here is the example I have in mind:
%%% begin the body of the letter
Dear \MmeOrSir\ \FirstName\ \FamilyName,
We have received your application and we thank you for your interest in our institution. \AnswerToApplication.
With our best regards, etc…
%%% end the body of the letter
The four commands \MmeOrSir, \FirstName, \FamilyName, \AnswerToApplication should correspond to the columns 1 through 4 of each line of the file "list-of-candidates.tex" as follows:
%%% begin list-of-candidates.tex Madam , Joan , of Arc , {You will be interviewed very soon} Mr , Groucho , Marx , {We are sorry, but this position is only for non smoking candidates}
\endinput %%% end list-of-candidates.tex
Thank you for help: OK
\unprotect \definemessageconstant {filecontents} \startmessages all library: filecontents title: filecontents 1: Overwriting file -- 2: Writing file -- \stopmessages \def\startfilecontents {\begingroup \protectbuffersfalse \dostartfilecontents} \def\dostartfilecontents[#1]% {\doiffileexistselse{#1} {\showmessage\m!filecontents{1}{#1}} {\showmessage\m!filecontents{2}{#1}}% \beforesplitstring#1\at.\to\filename \aftersplitstring #1\at.\to\extension \let\f!temporaryextension\extension \dostartbuffer[\filename][startfilecontents][stopfilecontents]} \def\stopfilecontents {\doifmode{mkiv}{\savebuffer[\filename]\ctxlua{file.copy("\jobname- \filename.tmp","\filename.\f!temporaryextension")}}% \endgroup} \ifx\savebuffer\undefined \def\savebuffer[#1] {\ctxlua{buffers.save("#1")}} \fi \protect \startfilecontents[data.dat] Madam, Joan, of Arc, {You will be interviewed very soon} Mr, Groucho, Marx, {We are sorry, but this position is only for non smoking candidates} \stopfilecontents \usemodule[database,letter] \define[4]\createletter {\startletter[opening={Dear #1 #2 #3,}] We have received your application and we thank you for your interest in our institution.\endgraf #4 \stopletter} \defineseparatedlist [LETTER] [command=\createletter, separator={,}] \starttext \processseparatedfile[LETTER][data.dat] \stoptext Wolfgang
Dear Wolfgang, Many thanks! As usual you are clear and sharp… Your code works and does exactly what I need… Moreover I learned from it several "clean" tricks in order to use the way one can write macros in ConTeXt. I have just to understand different parts of the code in order to wikify it. Best regards: OK On 10 mai 09, at 15:01, Wolfgang Schuster wrote:
Am 10.05.2009 um 14:32 schrieb Otared Kavian:
Hi all,
I have to write a letter to a few dozens candidates in which some parts are not identical. I may have the list of the persons, and the changing part for each of them in a file (named for instance "list-of-candidates.tex") on which each line corresponds to one person and the fields are sperated by commas (or any other suitable character). What would be the best way of coding this in ConTeXt?
Here is the example I have in mind:
%%% begin the body of the letter
Dear \MmeOrSir\ \FirstName\ \FamilyName,
We have received your application and we thank you for your interest in our institution. \AnswerToApplication.
With our best regards, etc…
%%% end the body of the letter
The four commands \MmeOrSir, \FirstName, \FamilyName, \AnswerToApplication should correspond to the columns 1 through 4 of each line of the file "list-of-candidates.tex" as follows:
%%% begin list-of-candidates.tex Madam , Joan , of Arc , {You will be interviewed very soon} Mr , Groucho , Marx , {We are sorry, but this position is only for non smoking candidates}
\endinput %%% end list-of-candidates.tex
Thank you for help: OK
\unprotect
\definemessageconstant {filecontents}
\startmessages all library: filecontents title: filecontents 1: Overwriting file -- 2: Writing file -- \stopmessages
\def\startfilecontents {\begingroup \protectbuffersfalse \dostartfilecontents}
\def\dostartfilecontents[#1]% {\doiffileexistselse{#1} {\showmessage\m!filecontents{1}{#1}} {\showmessage\m!filecontents{2}{#1}}% \beforesplitstring#1\at.\to\filename \aftersplitstring #1\at.\to\extension \let\f!temporaryextension\extension \dostartbuffer[\filename][startfilecontents][stopfilecontents]}
\def\stopfilecontents {\doifmode{mkiv}{\savebuffer[\filename]\ctxlua{file.copy("\jobname- \filename.tmp","\filename.\f!temporaryextension")}}% \endgroup}
\ifx\savebuffer\undefined \def\savebuffer[#1] {\ctxlua{buffers.save("#1")}} \fi
\protect
\startfilecontents[data.dat] Madam, Joan, of Arc, {You will be interviewed very soon} Mr, Groucho, Marx, {We are sorry, but this position is only for non smoking candidates} \stopfilecontents
\usemodule[database,letter]
\define[4]\createletter {\startletter[opening={Dear #1 #2 #3,}] We have received your application and we thank you for your interest in our institution.\endgraf #4 \stopletter}
\defineseparatedlist [LETTER] [command=\createletter, separator={,}]
\starttext \processseparatedfile[LETTER][data.dat] \stoptext
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
participants (2)
-
Otared Kavian
-
Wolfgang Schuster