string conversion isn't working.
Hi I'm sure there must be something easy that I am missing here but I can't get a test for to-string conversion to work when all the other conversion from integer to time are working. Here is the text:R E B O L [] fldblk:[vi to-integer vn to-string vdc to-decimal vdt to-date vtm to-time vmn to-money] errchk: func [fldblk errblk ][ i: 0 foreach [fld tp] fldblk [ ;print errblk ;print i f: get fld print rejoin [tp " " f/text] if error? try [do rejoin [tp " " f/text]] [i: i + 1 errblk/:i/1: fld errblk/:i/2: "Failed to convert"] ] ] view gui: layout[ vi: field vn: field vdc: field vdt: field vtm: field vmn: field button "val" [ errblk: array [6 2] copy [] errchk fldblk errblk either errblk/1/1 == none [ alert "Good Entry" ][ alert reform ["Errors " errblk/1/2] print to-string errblk/1/1 focus get errblk/1/1 print errblk return ] ] ]
posted by: John 29-Apr-2014/2:41:03-7:00
The vn field has a to-string conversion but when a string is entered the test gives an error. Why is that?
posted by: John 29-Apr-2014/2:42:56-7:00
In fact the conversion works when I enter a number into the vn field.
posted by: John 29-Apr-2014/2:48:12-7:00
After looking at it further, it seems that if i put something like "sss" in the vn field that when it goes to "do rejoin [tp " " fld]" that it gets a script error . If i literally try this in console mode do rejoin [to-string " " "sss"] it produces the script error saying sss has no value whereas it doesn't say this for to-integer " " "10".
posted by: john 29-Apr-2014/4:03:39-7:00
In fact to continue the above example if i say do rejoin [to-string " " "10"] that works but put "sss" in place of the 10 and it doesn't work in converting a string. apparently it thinks "sss" is a variable.
posted by: John 29-Apr-2014/5:09:20-7:00
When you 'do an integer value, the result evaluates just as if you've typed the integer into the console. Likewise, when you 'do a random string of characters, it's just as if you'd typed those characters into the console. So, if the 'sss word isn't defined, you get the expected error: >> 10 == 10 >> sss ** Script Error: sss has no value ** Near: sss >> do 10 == 10 >> do "sss" ** Script Error: sss has no value ** Near: sss By default, any set of characters typed into a field can be treated as a string. What case are you intending to test for by validating a string data type?
posted by: Nick 29-Apr-2014/8:14:52-7:00
That is a good point Nick. I don't have any real case that I was intending to test for by converting a string into a string. But I was curious why it was so darn difficult to do it. :). Maybe I should just skip doing an empty validation since anything goes in that field.
posted by: john 29-Apr-2014/16:05-7:00
However, an expedient solution might be to put some null action in the position of the to-conversion value. vi to-integer vn magicnullaction vdc etc.. Got a suggestion?
posted by: john 29-Apr-2014/18:36:25-7:00
You should really take a look at 'parse. All the validation possibilities are handled more effectively with it.
posted by: Nick 29-Apr-2014/22:17:28-7:00
As it stands, you can just leave "vn to-string" out of your fldblk.
posted by: Nick 30-Apr-2014/17:31:18-7:00
|