3
$\begingroup$

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?

$\endgroup$
7
$\begingroup$

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 *)
$\endgroup$
  • $\begingroup$ Nice! Will try it. Nice tip. $\endgroup$ – Murta Nov 2 '12 at 20:22
  • $\begingroup$ It worked like a charm. Tks $\endgroup$ – Murta Nov 3 '12 at 15:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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