ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Jaroslav Hajtmar <hajtmar@gyza.cz>
To: ntg-context@ntg.nl
Subject: Re: expand date from CSV file
Date: Fri, 19 Dec 2014 03:07:09 +0100	[thread overview]
Message-ID: <5493884D.50303@gyza.cz> (raw)
In-Reply-To: <549317E5.9070807@gmx.es>

Hi Pablo.
Peter pointed out an error in my solution. Thanks Peter! His message but 
pointed out that in fact is not the task as simple as it seems at first 
glance. In fact, a lot depends on what target group for those you solve 
a problem resp. whether e.g. date of birth of persons. What does it mean 
03/01/00? It means 1/3/1900? Or does it mean 01/03/2000? Particular job 
you have to deal specifically separately. It occurred to me yet 
following solution that respects the current year as the year when he 
could anyone born. E.g. 19/12/14 means a newborn soul (ie. In fact, 
12/19/2014), while 01/02/15 mean old man ie. in fact 01/02/1915. For the 
specific case you have to modify or create the solution separately.

Greetings
Jaroslav Hajtmar

Here is new minimal example:

\usemodule[scancsv]

\def\ddmmyyyy#1#2#3{% #1 - date, #2 - old separator, #3 - new separator
\startlua
     local parsedate=thirddata.scancsv.ParseCSVLine('#1','#2');
     local day=tonumber(parsedate[1]);
     local month=tonumber(parsedate[2]);
     local year=tonumber(parsedate[3]);
     if (year<100) then % when is only two digits year format then
             if year<=14 then % it is very young person
                 year=year+2000
             else % this person has more than one hundred years
                 year=year+1900;
             end;
     end;
     tex.print(day..'#3'..month..'#3'..year);
\stoplua
}

\unexpanded\def\lineaction{
     \Name\ born \Date\quad  (\ddmmyyyy{\Date}{/}{.\\,}) \\
}

% Content of CSV file:
% Name;Date
% ME;11/10/14
% You;05/02/14
% He;15/02/2014
% She;03/03/12
% It;03/03/14
% A;11/11/1999
% B;01/2/1964
% C;02/3/23
% D;03/4/64
% E;04/5/00
% F;05/6/01
% G;05/7/15
% H;05/7/1915
% Test0;1/2/00
% Test1;1/2/01
% Test2;1/2/02
% Test3;1/2/03
% Test4;1/2/04
% Test5;1/2/05
% Test6;1/2/06
% Test7;1/2/07
% Test8;1/2/08
% Test9;1/2/09
% Test10;1/2/10
% Test11;1/2/11
% Test12;1/2/12
% Test13;1/2/13
% Test14;1/2/14
% Test15;1/2/15
% Test16;1/2/16
% Test17;1/2/17
% Test18;1/2/18
% Test19;1/2/19
% Test20;1/2/20

\setheader
  \setsep{;}
  \setfiletoscan{mail.csv}

\starttext
    \filelineaction
\stoptext



Dne 18.12.2014 19:07, Pablo Rodriguez napsal(a):
> On 12/18/2014 01:24 PM, Jaroslav Hajtmar wrote:
>> Hi Pablo,
>> I am sending still slightly modified version (use local variables and
>> better typographic output).
>> It use of much variables, but at least it is clear how it works. For
>> solution occurred me to use parsing function that I have been defined in
>> the library, so that it can be successfully used.
> Many thanks for your reply, Jaroslav.
>
> This is exactly what I need.
>
> Many thanks for your help,
>
> Pablo
>
>
>> \usemodule[scancsv]
>>
>> \def\ddmmyyyy#1#2#3{% #1 - date, #2 - old separator, #3 - new separator
>> \startlua
>>       local parsedate=thirddata.scancsv.ParseCSVLine('#1','#2');
>>       local day=tonumber(parsedate[1]);
>>       local month=tonumber(parsedate[2]);
>>       local year=tonumber(parsedate[3]);
>>       if (year<2000) then year=year+2000 end;
>>       tex.print(day..'#3'..month..'#3'..year);
>> \stoplua
>> }
>>
>> \unexpanded\def\lineaction{
>>       \Name\ arrived on \ddmmyyyy{\Date}{/}{.\\,} \\
>> }
>>
>>
>> %     Name;Date
>> %     ME;11/10/14
>> %     You;05/02/14
>> %     He;15/02/2014
>> %     She;03/03/12
>> %     It;03/03/14
>>
>> \setheader
>>    \setsep{;}
>>    \setfiletoscan{mail.csv}
>>
>> \starttext
>>      \filelineaction
>> \stoptext
>>
>>
>>
>>
>> Dne 18.12.2014 9:39, Jaroslav Hajtmar napsal(a):
>>> Hi Pablo
>>>
>>> Here is a quick solution. However, it not treat the incorrect input
>>> data, ie it requires, however, correct input, otherwise it will
>>> collapse ...
>>>
>>> Jaroslav Hajtmar
>>>
>>>
>>>
>>> \usemodule[scancsv]
>>>
>>> \def\ddmmyyyy#1#2#3{% #1 - date, #2 - old separator, #3 - new separator
>>> \startlua
>>>      parsedate=thirddata.scancsv.ParseCSVLine('#1','#2');
>>>      day=tonumber(parsedate[1]);
>>>      month=tonumber(parsedate[2]);
>>>      year=tonumber(parsedate[3]);
>>>      if (year<2000) then year=year+2000 end;
>>>      tex.print(day..'#3'..month..'#3'..year);
>>> \stoplua
>>> }
>>>
>>> \unexpanded\def\lineaction{
>>>      \Name\ arrived on \ddmmyyyy{\Date}{/}{.} \\
>>> }
>>>
>>>
>>> %     Name;Date
>>> %     ME;11/10/14
>>> %     You;05/02/14
>>> %     He;15/02/2014
>>> %     She;03/03/12
>>> %     It;03/03/14
>>>
>>> \setheader
>>>   \setsep{;}
>>>   \setfiletoscan{mail.csv}
>>>
>>> \starttext
>>>     \filelineaction
>>> \stoptext
>>>
>>>
>>>
>>>
>>>
>>> Dne 17.12.2014 22:20, Pablo Rodriguez napsal(a):
>>>> Dear list,
>>>>
>>>> I have the following sample:
>>>>
>>>>       \usemodule[scancsv]
>>>>
>>>>       \unexpanded\def\lineaction{
>>>>       \Name\ arrived on \Date\\
>>>>       }
>>>>
>>>>       \setheader
>>>>       \setsep{;}
>>>>       \setfiletoscan{mail.csv}
>>>>
>>>>       \starttext
>>>>           \filelineaction
>>>>       \stoptext
>>>>
>>>> that reads data from mail.csv:
>>>>
>>>>       Name;Date
>>>>       ME;11/10/14
>>>>       You;05/02/14
>>>>       He;15/02/2014
>>>>       She;03/03/12
>>>>       It;03/03/14
>>>>
>>>> My question is simple (and not related to CSV data import): how can I
>>>> define a command (ConTeXt or Lua) that changes date format from DD/MM/YY
>>>> to DD/MM/YYYY when required?
>>>>
>>>> Many thanks for your help,
>>>>
>>>>
>>>> Pablo
>

___________________________________________________________________________________
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  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

      reply	other threads:[~2014-12-19  2:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-17 21:20 Pablo Rodriguez
2014-12-18  8:39 ` Jaroslav Hajtmar
2014-12-18 12:24   ` Jaroslav Hajtmar
2014-12-18 12:37     ` Peter Münster
2014-12-18 18:09       ` Pablo Rodriguez
2014-12-20  6:40       ` Jaroslav Hajtmar
2014-12-18 18:07     ` Pablo Rodriguez
2014-12-19  2:07       ` Jaroslav Hajtmar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5493884D.50303@gyza.cz \
    --to=hajtmar@gyza.cz \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).