Spencer,

In terms of speed, I would mostly stick with just the val function. Just
the idea that converting a string to a number and back to a string and
comparing them is fraught with danger, at least for floating point.

Note that the val function returns a number. It returns 0 for things that
don't parse and for real zeroes. So if you had code like:

num = val(somestring)

if num <> 0 then  ' this is definitely a number
     ' return true
else
     ' parse the string looking for spaces/tabs and then a 0 digit to
determine a true 0
endif

This code will be much faster if you think that you usually do have
numbers. The val function will do all the work for you. Call it an
optimistic implementation. You can even design the function so it returns
the number on success so that you don't bother doing it again.

Eric Blasenheim
Software Architect
MapInfo Corporation



Mail List:
       [EMAIL PROTECTED]
                                                                           
 From:      on 05/17/2004 11:54 AM AST                                     
                                                                           
 To:       <[EMAIL PROTECTED]>                             
                                                                           
 cc:                                                                       
                                                                           
 Subject:  RE:  MI-L Testing to ensure a string is numeric                 
                                                                           



No, it will notThere are a couple of ways to implement them, some of which
are more efficient than others.

The str$(val()) method is the fastest method, but it's not the most robust.
For one thing, it works only for integers.  However, it's great for quick
applications that require only integers.

For robust, idiot-proof applications, you need more sophisticated
validation
routines.

It is possible, of course, to write a routine that scans the string
for the correct format, but this can be very slow, given that you
have to make calls to mid$() for every character in the string.  If
you've been programming for any length of time, you've probably written
one that you can adapt to MapBasic.  Or you can write one in a faster
language, put it in a DLL, and link to it from MapBasic (scanf is NOT
recommended).

Another method is to try assigning the string to a MapBasic window
variable,
and catching any errors. This method is optimal for validating strings that
can take non-integer values.

run command "Dim v_dbl as float"
...
function good_float (ByVal s as string, f as float) as logical
On Error Goto notvalid
run command "v_dbl="+sval
OnError goto 0
f=val(Sval)
good_float = true
exit function
notvalid: resume failure
failure:  good_float = false
end function


Hope this helps
Spencer



-----Original Message-----
From: B. Thoen [mailto:[EMAIL PROTECTED]
Sent: Monday, May 17, 2004 11:05 AM
To: Tim.Nuteson
Cc: [EMAIL PROTECTED]
Subject: Re: SUM: MI-L Testing to ensure a string is numeric

Would that algorithm return the correct result if you fed it a numeric
string like '0023456', or are numbers with leading zeros not going to be
encountered?


On Mon, 17 May 2004, Tim.Nuteson wrote:

> Thanks to all who responded to my question:  How can I ensure that a
> value entered into an EditText control of a MB dialog is numeric?  The
> simplest solution was offered by Michael Taylor, Martin Highham, and
> Robert Crossley:
>
>     If str$(val(teststring)) = teststring then
>       'numeric
>     Else
>       'not
>     End If
>
> Thanks again,
>
> Tim Nuteson
> Target
>
>
> ---------------------------------------------------------------------
> List hosting provided by Directions Magazine | www.directionsmag.com |
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> Message number: 11784
>


---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 11788



---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 11789







---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 11816

Reply via email to