ExtractNumber$( )

Purpose
Extracts a number part of a string
 
Author Date of code (original) Updated on Date of page (original) Updated on

Tim Nuteson 

Tim.Nuteson@target.com

07June2002

07June2002

 
Restrictions on use
This module is distributed under the terms of the Lesser GNU General Public License. Restrictions on the use of this work in a commercial application or derivative work is described in the Lesser GNU General Public License page at: http://www.fsf.org/copyleft/lesser.html
 
Description

ExtractNumber$() finds in a string the numeric characters that forms a number. The "number" should be preceded by a space and followed by a space or the end of the string. The "number" can be an integer or a decimal number as long as it contains a leading digit (zero or non-null). Only the first "number" of a string is extracted.

Designed originally for parsing out highway numbers for display in highway shields

 
External resources
none
 
Declare statement of sub_function. Include in your program. Copy/Paste if needed.
Declare function ExtractNumber$ (byval Str as string) as String
 
Returned value(s) (function only)
a string of characters forming a number. The string is empty if no number is found.
 
Other required declare statement(s). Include in your program. Copy/Paste if needed.

 
MapBasic Code. Copy/Paste if needed.

Function ExtractNumber$(Byval Str as String) as String

 

Dim SubStr as String

Dim numpos, spacepos, checkpos as SmallInt

 

For checkpos = 1 to Len(str)

   If Mid$(str, checkpos, 1) = any("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") Then

      NumPos = checkpos

      Exit For

   End If

Next

 

If NumPos then

   SpacePos = Instr(numpos, Str, " ")

End If

 

If Spacepos then

   SubStr = Mid$(str, numpos, spacepos-numpos)

  Else

   SubStr = Mid$(str, numpos, len(str) - numpos + 1)

End If

 

ExtractNumber$ = SubStr

 

End Function

 
Availability for download
 
Example

dim result as string

result = extractnumber$("Are we in 2002 or not?")

if result ="" then

    print "No number in string"

  else

    print val(result)

end if

 

 
Comments
1 - If a decimal number could start with a 'point', i.e. without leading digit, the code should be modified by adding "." to the list of ANY( ).

2 - If there are more than one number in the string, that string should be repeatedly truncated and processed with the function as long as a number is found.

 
See also