Jacques,

You could have learned Perl in the time it took to write that. :)

Jared


On Friday 26 October 2001 20:20, Jacques Kilchoer wrote:
> > -----Original Message-----
> > From: Suhen Pather [mailto:[EMAIL PROTECTED]]
> >
> > Thanks for the reply.
> > I am passing a hardcoded date.
> > I am not getting a date from the
> > "date" command in ksh.
> >
> > What my ksh does is retrieves $1 and must check if the date format
> > is in DD-MON-YY eg. 02-FEB-01.
> > It uses the hardcoded date (passed in as argument 1) in the script.
> > If the date is in another format other than above then it must exit.
>
> I dusted off my old C programming skills (Sorry Mr. Still I still don't
> know PERL that well). Why not write a "check_date" program that returns 0
> for a valid date and 1 for an invalid date?
> The date verification function is case-sensitive and only checks for the
> one format. It also assumes that two-digit years will be prefixed with
> "20". Modifying it to be more user-friendly is left as an exercise to the
> alert reader.
>
> /*
>  *  verify that date passed to function is a correct date
>  *  parameter passed to function must be in the same format
>  *   as shell command <<date +"%d-%b-%y">>
>  *  example:  check_date 26-Jan-01
>  *            echo $?
>  *            check_date 32-Jan-01
>  *            echo $?
>  *
>  *  program assumes that %b date format will return a string with 3
> characters
>  */
> #include <ctype.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <time.h>
>
>
> #define B_DTFMT_LEN 3
> #define DT_LEN 6 + B_DTFMT_LEN
> #define HIGH_MM 11
> #define CBASE_YEAR 1900
> #define BASE_YEAR 2000
>
> extern int main (int argc, char **argv)
> {
>    short int mm ;
>    struct tm tmi ;
>    time_t t ;
>    char month[B_DTFMT_LEN + 1] = { '\0' },
>         day[3] = { '\0' },
>         compmonth[B_DTFMT_LEN + 1] = { '\0' },
>         compdate[DT_LEN + 1] = { '\0' } ;
>
>    if (argc != 2)
>    {
>       puts ("Usage - check_date \"date\" (date in %d-%b-%y format)") ;
>       return EXIT_SUCCESS ;
>    }
>
>    if (strlen (argv[1]) != DT_LEN || argv[1][2] != '-'
>
>        || argv[1][3 + B_DTFMT_LEN] != '-'
>        || ! isdigit (argv[1][0]) || ! isdigit (argv[1][1])
>        || ! isdigit (argv[1][4 + B_DTFMT_LEN])
>        || ! isdigit (argv[1][5 + B_DTFMT_LEN]) )
>
>       return EXIT_FAILURE ;
>
>    strncpy (month, argv[1] + 3, B_DTFMT_LEN) ;
>
>    memset (&tmi, '\0', sizeof tmi) ;
>    mm = -1 ;
>    while (strncmp (month, compmonth, B_DTFMT_LEN) && ++mm <= HIGH_MM)
>    {
>       tmi.tm_mday = 1 ;
>       tmi.tm_mon = mm ;
>       tmi.tm_year = 2001 ;
>       strftime (compmonth, B_DTFMT_LEN + 1, "%b", &tmi) ;
>    }
>    if (mm > HIGH_MM)
>       return EXIT_FAILURE ;
>
>    strncpy (day, argv[1], 2) ;
>    tmi.tm_mday = atoi (day) ;
>    tmi.tm_mon = mm ;
>    tmi.tm_year = BASE_YEAR + atoi (argv[1] + 4 + B_DTFMT_LEN) - CBASE_YEAR
> ; if ((t = mktime (&tmi)) == (time_t) -1)
>       return EXIT_FAILURE ;
>
>    tmi = *localtime (&t) ;
>    strftime (compdate, DT_LEN + 1, "%d-%b-%y", &tmi) ;
>    if (strcmp (argv[1], compdate))
>       return EXIT_FAILURE ;
>
>    return EXIT_SUCCESS ;
> }

----------------------------------------
Content-Type: text/html; charset="iso-8859-1"; name="Attachment: 1"
Content-Transfer-Encoding: quoted-printable
Content-Description: 
----------------------------------------
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Jared Still
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to