Subject |
Re: string with commas to numeric |
From |
Charlie <tm@tc.com> |
Date |
Sat, 09 Mar 2024 10:19:58 -0500 |
Newsgroups |
dbase.getting-started |
Hi Akshat... Thanks very much for the info!
Akshat Kapoor Wrote:
> Good Evening Charlie,
>
> >
> > form.spinboxestv1.value = val(co.fields["&grd."].value)
> >
> > The spinbox is numeric and co is a string. This works unless there are commas in the string. Then 17,234 becomes 17.
> >
> > How can I get the entire number without commas when the string has commas in it?
>
> This is just for additional ideas since you have a working solution.
> I was out of station so just started reading the post after many days.
> The following routine is there in stringEx.cc of duflp
>
> function Text2Num
> /*
> -------------------------------------------------------------
> Programmer..: Akshat Kapoor
> Date........: August, 2021
> Notes.......: Converts a character string with a numeric
> value to the appropriate numeric value
> in dBASE. Created to deal with input from
> a CSV file, where many different issues
> come up with numeric formats. The difficulty
> is if the string has the "thousands" separator
> (123,456.12), and it is a string, the val()
> function stops at the separator, and returns
> 123, instead of the full numeric value. Other
> issues such as negative numbers in parens,
> different decimal point symbols for different
> parts of the world, make things even more fun.
> Written for.: dBASE 2019
> Rev. History: August, 2021 -- KJM -- with Akshat's permission
> co-opted it for the Import Data routines in the
> dUFLP.
> Calls.......: None
> Usage.......: Text2Num( <cNumber>, <cDecimal> )
> Example.....: ? Text2Num( "123,456.12", "." ) --> 123456.12
> ? Text2Num( "123.456,12", "," ) --> 123456.12
> ? Text2Num( "(123.456,12)", "," ) --> -123456.12
> Returns.....: numeric value with no formatting except for
> decimal
> Parameters..: cNumber = character string containing numeric value
> with whatever formatting is in the string
> cDecimal = decimal point character. Default is "."
>
> NOTE: This is designed specifically for the purpose of converting
> numeric values that are stored in strings, to their actual
> numeric value. If you pass, say, a phone number string to this
> function, the results will be odd, to say the least.
> -------------------------------------------------------------
> */
> parameters cStr, cDecimal
>
> if pCount() == 0 // no parameters
> msgbox( "Please pass the character string necessary to convert
> to "+;
> "a numeric value!", "Missing Parameter", 16 )
> return 0
> endif
> if pCount() == 1 // only one parameter
> cDecimal = "." // default of a period for the decimal point marker
> endif
>
> private cRetVal, cAllowed, a, cCurrent, cLocalDecimal
> cLocalDecimal = set( "point" )
> cRetVal = ''
> // allowed characters in resulting string:
> cAllowed = '0123456789-'
>
> // loop through the character string, one character at a time:
> for a = 1 to len(cStr)
> cCurrent = substr(cStr,a,1)
> if cCurrent $ cAllowed
> cRetVal+= cCurrent
> elseif cCurrent = '(' // we have a negative number: (123) is -123
> cRetVal = '-'+cRetVal
> elseif cCurrent = '%' // percentage, divide the value by 100
> // 50% = 0.50
> cRetVal = " " + (val(cRetVal)/100)
> elseif cCurrent = cDecimal
> cRetVal = cRetVal + cLocalDecimal // add the decimal point
> symbol
> endif
> endfor
>
> return val( cRetVal )
> // End of method: Text2Num()
>
>
> Regards
> Akshat
>
|
|