Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a big array of data that I imported from a lot of XML files. To get the data, among other manipulations, I use this function:

Cases[xml,XMLElement[nodeName,_,a_]-> a,\[Infinity]]

When I get my final array, I have a lot of number fields that are as String and that I need to convert into Number. To do that I created this function:

clean[data_]:=Map[If[NumberQ@ToExpression[#],ToExpression[#],#]&,data,{-1}] 

The problem is that I have strings with "??" characters, so if o use clean on it as for example:

clean[{"asd??asd", "123.3"}]

Mathematica try to interpret the first element as context ones. And I get:

Global`asd

How to avoid it? How can I improve my clean function, or the way I load de XML?

share|improve this question

1 Answer 1

up vote 7 down vote accepted

Rather than applying ToExpression and then NumberQ, perhaps you could just use StringMatchQ with NumberString in the first place.

StringMatchQ["assd??asd", NumberString]
(* Out: False *)

StringMatchQ["123.3", NumberString]
(* True *)
share|improve this answer
    
Nice! Will try it. Nice tip. –  Murta Nov 2 '12 at 20:22
    
It worked like a charm. Tks –  Murta Nov 3 '12 at 15:36

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.