Wow, let's put together a new feature request for BZ...
How about, "is a user readable date", or "is really a date"?
"is a formatted date"?
On Aug 15, 2007, at 12:21 PM, Rob Cozens wrote:
Hi Len,
1) Why does put "4" is a date return true? If this function
doesn't actually work, why is it still available? I'd like to be
able to have users enter a date without any kind of punctuation
(i.e., 08142007) and be able to validate it as a valid date. The
same applies to entering 1315 as a time (no colon).
Others have explained why "is a date" returns true for any integer.
Here is a function that validates user input as valid according to
the current system date format and returns the date in dateItems
format.
function validDate theString -- 5 April 04:RCC
put stripBlanks(theString,false) into theString -- strips leading
or trailing blanks from a string
get systemDateFormat() -- see Called Routines below
set the itemDelimiter to char -1 of it -- the Separater
if the number of items of theString <> 3 then return false
delete the last char of it
delete char offset("mm",it) of it -- remove double characters, if
any...
-- which
there will be until RR system date
--
correctly recognizes suppression of leading
-- zeroes
delete char offset("dd",it) of it
delete char offset("yy",it) of it
repeat with x = 1 to 3
switch char x of it
case "m"
put item x of theString into theMonth
if not validDigits(theMonth) then return false -- each char
>= "0" and <= "9"
if theMonth < 1 or theMonth > 12 then return false
break
case "d"
put item x of theString into theDay
if not validDigits(theDay) then return false
if theDay < 1 or theDay > 31 then return false
break
case "y"
put item x of theString into theYear
if not validDigits(theYear) then return false
put length(theYear) into charCount
if charCount <> 2 and charCount <> 4 then return false
if charCount is 2 then add 2000 to theYear
if theYear < 1 then return false
break
end switch
end repeat
if theDay < 29 then return
true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
if theMonth is 2 then
if theDay > 29 or not leapYear(theYear) then return false --
leapYear returns boolean
else return true&return&theYear&comma&theMonth&comma&theDay&",
0,0,0,0"
else
if offset("0",theMonth) = 1 then delete char 1 of theMonth
set the itemDelimiter to comma
if theMonth is among the items of "1,3,5,7,8,10,12" then return
true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
if theDay is 31 then return false
else return true&return&theYear&comma&theMonth&comma&theDay&",
0,0,0,0"
end if
end validDate
Cal;led routines:
function systemDateFormat
put "1999,1,9,0,0,0,0" into testDate
convert testDate to short system date -- RR pads day/month
regardless of settings
-- which means function will not recognize the
-- absence of leading zeroes until this is fixed
put 2 into characterNumber
repeat while char characterNumber of testDate is in "1,9"
add 1 to characterNumber
end repeat
put char characterNumber of testDate into dateSeparater
put empty into returnDateFormat
set the itemDelimiter to dateSeparater
repeat for each item datePart in testDate
if datePart > 9 then
if datePart > 99 then put "y" after returnDateFormat
put "y" after returnDateFormat
else if datePart > 1 then
if length(datePart) > 1 then put "d" after returnDateFormat
put "d" after returnDateFormat
else
if length(datePart) > 1 then put "m" after returnDateFormat
put "m" after returnDateFormat
end if
end repeat
return returnDateFormat&dateSeparater
end systemDateFormat
2) This is the "biggie." What is the proper way to validate the
contents of a field. I tried writing a "closeField" script that
would do the validation, put up a message box if the format/
contents are wrong, then set the focus back to the field for
correction by the user. I end up getting two insertion point
cursors (one in the "bad" field and one in the next field. The
keyboard does go to the bad field but having more than one
insertion point is confusing to me let alone my end users. By the
way, I have tried not passing the closeField message but I'm not
sure if the "tab to next field" takes place anyway.
Among my back burner projects is a Data Dictionary-driven RAD,
which will validate user input in a field as compliant with the
Data Dictionary specifications for the data that field captures
(eg: required?, numeric?, # of decimal positions, show thousands
separator?, show currency symbol?, lookup table, autoentry?, max
length, max lines, etc). Only some of the edits have been tested
at this stage; but all that our working are triggered by
closeField, enterInField (and returnInField for single-line
fields),or internal logic if auto-entry fields, and I have not
experienced the problems you describe.
However, I would note that my user interface keeps ALL fields
without focus locked while accepting user input in a field. When
the user signals "I'm done", the field contents are validated to DD
specs. If invalid, an error message is displayed; if valid, the
field is locked and the next (either by ordinal or based on the
user input) field is unlocked and given focus.
3) Related to #2 above, I frequently get vertical lines (insertion
point cursors) in a field as I move the mouse across it. Once
they start showing up, (and they stay so I end up with vertical
bars between every letter in the field!), I can get them to appear
by moving the mouse ABOVE the field (not in it) like I have a
vertical line that runs the height of the entire screen. Is this
something I'm doing or is it a known problem?
Do you get the same effect from a standalone compiled from your stack?
Rob Cozens CCW
Serendipity Software Company
"And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee."
from "The Triple Foole" by John Donne (1572-1631)
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your
subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution
_________________________________________________________________
Need personalized email and website? Look no further. It's easy
with Doteasy $0 Web Hosting! Learn more at www.doteasy.com
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution