Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text bottom

VALDGRE%  PowerBASIC  Function

         

VALDGRE% function is a predicate that evaluates to "true" (-1), if its parameter represents the valid date in Gregorian calendar, or to "false", if it doesn't.  Date field delimiters are expected to be in the fixed positions 3 and 5; values of delimiters are insignificant.

Direct dependencies:

DIGITAL% Check character string for digital value (predicate)
LEAP% Check year for leap value (predicate)



 VALDGRE%  Source  Program                     Debugging program            Debugging logout

      ' VALDGRE%(0.0)  Check Date for Valid Gregorian Value  04/28/1997-03/25/2002
      ' --------------------------------------------------------------------------
      ' Copyright (C) 1997-2002 by Vladimir Veytsel                  www.davar.net

      ' Type ---------------------------------------------------------------------

      '    Function (predicate)

      ' Description --------------------------------------------------------------

      '    VALDGRE% function is a predicate that returns validity characteristic
      '    of the specified date in Gregorian calendar system.

      ' Declaration --------------------------------------------------------------

      '    DECLARE FUNCTION VALDGRE%(Spec.Date$)

      ' Parameter ----------------------------------------------------------------

      '    Spec.Date$  - Specified date in the form of MM-DD-YY or MM-DD-CCYY

      ' Value --------------------------------------------------------------------

      '    If specified date is either EMPTY or valid, i.e:
      '       it has length either of 8 or 10 characters and
      '       it is DIGITAL (with the exception of date field delimiters) and
      '       month value lies within 1-12 and
      '       day number lies within range valid for the specified month
      '       (considering specified year leap characteristic when
      '       evaluating day range for February),
      '       then -1 (true)  is returned to the point of function invocation,
      '       else  0 (false) is returned to the point of function invocation.

      ' Notes --------------------------------------------------------------------

      '  - Delimiters of parameter date fields are irrelevant and can be any
      '    symbols.  Date fields are extracted from fixed positions.

      '  - EMPTY date is considered to be a valid date, since in date programs
      '    this is an indication to use CURRENT date (default).

      ' Examples -----------------------------------------------------------------

      '    VALDGRE%(""           )=-1
      '    VALDGRE%("11-11-1"    )= 0
      '    VALDGRE%("11-11-111"  )= 0
      '    VALDGRE%("11-11-11111")= 0
      '    VALDGRE%("*1-11-11"   )= 0
      '    VALDGRE%("11-*1-11"   )= 0
      '    VALDGRE%("11-11-*1"   )= 0
      '    VALDGRE%("00-01-00"   )= 0
      '    VALDGRE%("13-01-00"   )= 0
      '    VALDGRE%("01-00-00"   )= 0
      '    VALDGRE%("01-32-00"   )= 0
      '    VALDGRE%("02-29-1900" )= 0
      '    VALDGRE%("02-30-2000" )= 0
      '    VALDGRE%("02-27-1900" )=-1
      '    VALDGRE%("02-28-2000" )=-1
      '    VALDGRE%("01-01-2001" )=-1
      '    VALDGRE%("06-15-2002" )=-1
      '    VALDGRE%("12-15-9999" )=-1

      ' External Functions -------------------------------------------------------

           DECLARE FUNCTION DIGITAL%(Strng$,Delim$)
           DECLARE FUNCTION LEAP%   (Year$)

      ' Start Function -----------------------------------------------------------

           DEFINT A-Z  ' All defaulted variables are integer

           FUNCTION VALDGRE%(Spec.Date$) PUBLIC

      ' Check Specified Date for Empty Value -------------------------------------

           IF (LEN(Spec.Date$)=0) THEN
              VALDGRE%=-1
              EXIT FUNCTION
           END IF

      ' Check Specified Date for Valid Length (8 or 10 Characters) ---------------

           IF ((LEN(Spec.Date$)<> 8)  AND  _
               (LEN(Spec.Date$)<>10)) THEN
              VALDGRE%=0
              EXIT FUNCTION
           END IF

      ' Check Specified Date for Digital Value -----------------------------------

           IF (DIGITAL%(LEFT$(Spec.Date$,2)    + _
                         MID$(Spec.Date$,4,2)  + _
                         MID$(Spec.Date$,7),"")) THEN
              Month=VAL(LEFT$(Spec.Date$,2))
              Day  =VAL( MID$(Spec.Date$,4,2))
              Year$=     MID$(Spec.Date$,7)
           ELSE
              VALDGRE%=0
              EXIT FUNCTION
           END IF

      ' Check Month and Day for Lying within Proper Borders ----------------------

           IF ((Month>0)   AND _
               (Month<13)) THEN
              VALDGRE%=((Day>0)AND _
                        (Day<(VAL(MID$("322932313231323231323132",Month*2-1,2))+ _
                              (Month=2)*LEAP%(Year$))))
           ELSE
              VALDGRE%=0
           END IF

      ' Finish.Function ----------------------------------------------------------

           END FUNCTION
  
         

 VALDGRE%  Debugging  Program                   Source program           Debugging logout

      ' VALDGRE%(0.0)  Check Date for Valid Gregorian Value  04/28/1997-03/26/2002
      ' --------------------------------------------------------------------------

        $INCLUDE "VALDGRE"
        $LINK    "MODULE.PBL"

        DECLARE FUNCTION VALDGRE%(Spec.Date$)

        CLS
        PRINT "VALDGRE%(0.0)  Check Date for Valid Gregorian Value  ";DATE$;
        PRINT "  ";LEFT$(TIME$,5)
        PRINT STRING$(70,"-")
        PRINT

        PRINT "VALDGRE%(''           )="; _
               VALDGRE%(""           )
        PRINT "VALDGRE%('11-11-1'    )="; _
               VALDGRE%("11-11-1"    )
        PRINT "VALDGRE%('11-11-111'  )="; _
               VALDGRE%("11-11-111"  )
        PRINT "VALDGRE%('11-11-11111')="; _
               VALDGRE%("11-11-11111")
        PRINT "VALDGRE%('*1-11-11'   )="; _
               VALDGRE%("*1-11-11"   )
        PRINT "VALDGRE%('11-*1-11'   )="; _
               VALDGRE%("11-*1-11"   )
        PRINT "VALDGRE%('11-11-*1'   )="; _
               VALDGRE%("11-11-*1"   )
        PRINT "VALDGRE%('00-01-00'   )="; _
               VALDGRE%("00-01-00"   )
        PRINT "VALDGRE%('13-01-00'   )="; _
               VALDGRE%("13-01-00"   )
        PRINT "VALDGRE%('01-00-00'   )="; _
               VALDGRE%("01-00-00"   )
        PRINT "VALDGRE%('01-32-00'   )="; _
               VALDGRE%("01-32-00"   )
        PRINT "VALDGRE%('02-29-1900' )="; _
               VALDGRE%("02-29-1900" )
        PRINT "VALDGRE%('02-30-2000' )="; _
               VALDGRE%("02-30-2000" )
        PRINT "VALDGRE%('02-27-1900' )="; _
               VALDGRE%("02-27-1900" )
        PRINT "VALDGRE%('02-28-2000' )="; _
               VALDGRE%("02-28-2000" )
        PRINT "VALDGRE%('01-01-2001' )="; _
               VALDGRE%("01-01-2001" )
        PRINT "VALDGRE%('06-15-2002' )="; _
               VALDGRE%("06-15-2002" )
        PRINT "VALDGRE%('12-15-9999' )="; _
               VALDGRE%("12-15-9999" )

        PRINT
        PRINT "Execution completed - hit [Enter] to continue..."
  
         

 VALDGRE%  Debugging  Logout                   Source program             Debugging program

         

   VALDGRE%(0.0)  Check Date for Valid Gregorian Value  03-26-2002  18:02
   ----------------------------------------------------------------------

   VALDGRE%(''           )=-1
   VALDGRE%('11-11-1'    )= 0
   VALDGRE%('11-11-111'  )= 0
   VALDGRE%('11-11-11111')= 0
   VALDGRE%('*1-11-11'   )= 0
   VALDGRE%('11-*1-11'   )= 0
   VALDGRE%('11-11-*1'   )= 0
   VALDGRE%('00-01-00'   )= 0
   VALDGRE%('13-01-00'   )= 0
   VALDGRE%('01-00-00'   )= 0
   VALDGRE%('01-32-00'   )= 0
   VALDGRE%('02-29-1900' )= 0
   VALDGRE%('02-30-2000' )= 0
   VALDGRE%('02-27-1900' )=-1
   VALDGRE%('02-28-2000' )=-1
   VALDGRE%('01-01-2001' )=-1
   VALDGRE%('06-15-2002' )=-1
   VALDGRE%('12-15-9999' )=-1

   Execution completed - hit [Enter] to continue...
        
      

         

View [and save] VALDGRE.BAS text       View [and save] ZVALDGRE.BAS text
(Use [Back] button or [Alt]+[CL] to return here from the viewed text)
Copyright © 1997–2002 by
Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text top