Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How does one determine if a value is a true INTEGER?
Message
From
25/10/2000 10:33:56
 
 
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00431993
Message ID:
00434040
Views:
21
>>>Are the first row elements are reliable indicators of the rest of the data?
>>>
>>>You could test the first row to discern column types, then use a replace all or an update to convert.
>>
>>In a word- No, sir.
>>
>>All you know of the data that you are getting, is:
>>
>>It´s a bunch of strings in a CSV file, i.e "2000","12345","91.21" asoasf.
>>There is quite bit more to it, but nothing concerning the issue at hand.
>
>oReg=CreateObj('VBScript.RegExp')
>oReg.Global = .T.
>oReg.Pattern = '("\d*)(\d{2}")'
>cFileContent = FILETOSTR(cFileNameToImport)
>cFileFixed = oReg.Replace(cFileContent,'$1.$2')
>=STRTOFILE(cFileFixed,cFileNameToImport+'.fixed')
>
>Now everything is already converted to exactly the correct decimals. The output for your sample line is:
>
>"20.00","123.45","91.21"
>
>Just import your CSV. I suspect that you really need to rip off the quotes surrounding numbers, so I'd do:
>
>oReg=CreateObj('VBScript.RegExp')
>oReg.Global = .T.
>oReg.Pattern = '("\d*)(\d{2}")'
>cFileContent = FILETOSTR(cFileNameToImport)
>cFixedUpIntegers = oReg.Replace(cFileContent,'$1.$2')
>oReg.Pattern = '"(\d*\.\d*)"'
>cAndRippedAwayUnwantedQuotes = oReg.Replace(cFixedUpIntegers,'$1')
>=STRTOFILE(cAndRippedAwayUnwantedQuotes,cFileNameToImport+'.fixed')
>
>That produces:
>
>20.00,123.45,91.21
>
>If I try the string "2000","99 and 44/100ths","12345","ABCDGoldFish","91.21"
>
>It produces:
>
>20.00,"99 and 44/100ths",123.45,"ABCDGoldFish",91.21
>
>It requires the WSH; see my sig block for details on the WSH. Do what you like; the WSH is non-negotiable; if you want to use this approach, you need it.


Ed,

I´ve tried it, and it´s fast enough, thats for sure.

As I wrote earlier,there is quite bit more to it...
For reasons better not talked about, I have to step through the file SUBSTR() by SUBSTR() in order to read the values between the commas, all in quotes.
I then have to look up the SAS INFORMAT (16.3,16.5,13.3 a.s.o. if you are familiar with SAS) in a table, and mimick the behaviour of SAS.
16.3 seems to mean divide by 100, if it´s not already a decimal value, 16.5 indicates a division by 10000, which would apply to nanoseconds for instance.

I guess what I´m trying to get at here is, I sort of need something like


DO CASE
>>CASE cFormat="16.3"
>>>>oReg.Pattern ='("\d*)(\d{2}")'
>>>>lcReplacePattern='$1.$2'

>>CASE cFormat="16.5"
>>>>oReg.Pattern =????
>>>>lcReplacePattern=?????
ENDCASE
oReg.Replace(cVar,lcReplacePattern)

Where do I find info on the Pattern property? How does it work for a division by 1000,10000?

And finally why does my text show up in bold, ´cause I don´t mean to shout.

Thank you for taking the trouble.
Peter Pirker


Whosoever shall not fall by the sword or by famine, shall fall by pestilence, so why bother shaving?

(Woody Allen)
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform