Re: atoi equivalents?
- To: mathgroup at smc.vnet.net
- Subject: [mg99408] Re: atoi equivalents?
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Tue, 5 May 2009 05:41:03 -0400 (EDT)
- References: <gtnk34$3le$1@smc.vnet.net>
Michael wrote: > What is the most efficient or recommended way to parse numbers in Mathematica? > > I can use ToExpression["1234"] and it will return the number. > But this won't do, because I could be scraping un-trusted data and the > above could lead to an injection of code. > I could also use something like this: ToExpression[StringCases["1234", > x1 : NumberString ~~ ___ -> x1]] > but then I have to add error checking and whatnot. > I suppose I could write a simple MathLink program which implement > atoi, atol, etc. > > All of these solutions seems like a lot of overhead. Anybody have a > better idea? I don't know whether this does what you need, but ImportString with format table automatically detects and converts everything that can be interpreted as a number to a number, everything else is left untouched as a string. E.g: ImportString["1234", "Table"] ImportString["12.e-3", "Table"] ImportString["Plot[x,{x,0,1}]", "Table"] if you have access to WebMathematica, you could also use the function MSPToExpression from the MSP` package which adresses the security problem in a wider sense and can be configured to let only certain symbols be converted. Anyway, that approach might well be overkill for your problem and I don't know whether it will work with versions 6 and 7... hth, albert