On 12/09/2014 12:45 AM, Jaroslav Hajtmar wrote:
Hi Pablo. I am glad that my library for you to use ... I noticed that you have in your CSV file header with column names (ie. head of CSV document). I do not know if you noticed the option put this information into scancsv.lua library. This is done via the command \setheader. In this case library does not consider the first line of the CSV file as a data line.
Hi Jaroslav, I know that, ubt I removed it in the sample I sent because I edited the CVS file with gedit and I forgot that the first line was the header (I was in a hurry). I actually use \setheader to ignore it, since headers with non-ASCII characters or spaces are problematic. I’m fine invoking \cA, \cB, \cC...
From the header of CSV file are now macros (from header names) contain later data from rows of the CSV file (changing in cycle). In addition, you can also use internal hooks. CSV file can even contain macros (must be defined before processing the CSV file).
Well, your sample needs further study. Internal hooks are fine (once I know what they really are and how to use them ;-)), but macros are totally out of question. CVS files come from Excel users (I don’t even mention what TeX or ConTeXt might be). Many thanks for your help, Pablo
Example of use hooks etc. eg. Here:
\usemodule[scancsv]
\setuppapersize[C6, landscape] \setuppagenumbering[location=]
% Structure of CSV file - you can use macros in CSV table too % name;address;postcode;city;linecolor % ME;STREET;0000;HERE;\green; % You;Square;9999;There;\red; % we;another Square;111;anyplace;\blue;
% Library is making \name, \address, \postcode, \city and \linecolor macros % when you using \setheader command.
% Your example: \unexpanded\def\lineaction{ \edef\lowercasename{\lowercase{\name}} \edef\uppercaseaddress{\uppercase{\address}} name: {\linecolor\name}\ -- lowercase name: \lowercasename\crlf address: \address\ -- upercase address: \uppercaseaddress\crlf \postcode\ \city\crlf
\page }
% My example with hooks: \unexpanded\def\tablelineaction{% \edef\ehname{\hname}% \edef\ehaddress{\haddress}% \edef\ehpostcode{\hpostcode}% \edef\ehcity{\hcity}% \ehname \ehaddress \ehpostcode \ehcity % }
% My simple example with hooks: \def\simpletablelineaction{% \bTD{\linecolor\numline}\eTD\hname\haddress\hpostcode\hcity% }
\setsep{;} % set separator \setheader % set information about header \setfiletoscan{mailmergedatatable.csv}
\starttext % process all file
Here is begin of processing...
\filelineaction
And here is end....
\page
And now we can use internal hooks:
\def\bch{\bTD } % begin column hook \def\ech{\eTD} % end column hook \def\blinehook{\bTR } % begin line hook \def\elinehook{\eTR} % end line hook \def\bfilehook{\bTABLE } % begin CSV file hook \def\efilehook{\eTABLE} % end CSV file hook
Here is begin of processing...
%process all file too (endless cycle) \doloopif{1}{==}{1}{\tablelineaction}
And here is end....
\page
Printing only specific data:
\doloopif{\name}{eq}{You}{\tablelineaction}
\page
Simpletablelineaction:
\doloopif{1}{==}{1}{\simpletablelineaction}
\page
Another using of hooks:
\def\bch{\bgroup\linecolor\bf } % begin column hook \def\ech{\egroup,\ } % end column hook \def\blinehook{Here is new \numline. line of CSV file:\crlf } % begin line hook \def\elinehook{\hairline\par} % end line hook \def\bfilehook{Here is all CSV file:\blank[2*big] } % begin CSV file hook \def\efilehook{\par Here is end of file processing\par} % end CSV file hook
\doloopif{1}{==}{1}{\tablelineaction}
\stoptext