With a text file with entries formatted as (output from C++):

f[38.67] = -2.5387862698183892298317350539374412777263289550697e-05;

Is there a way to read this into Mathematica? It seems to be getting confused with the e, thinking it is just a symbol e.

  • 3
    $\begingroup$ Related: mathematica.stackexchange.com/questions/1737/… $\endgroup$ – cormullion Nov 22 '12 at 13:08
  • $\begingroup$ When reading Python output in the past I have once or twice done a global replacement of e with *^. That seems like the easiest approach if you have this file already in place. $\endgroup$ – Oleksandr R. Nov 22 '12 at 14:59
  • $\begingroup$ Could be, is there an automated way to get Mathematica to do this? I am going to have lots of files in this format..(I was thinking about changing the output of c++ code to non scientific but it's not too easy with the MPFR data type and c++ wrapper I am using) $\endgroup$ – fpghost Nov 22 '12 at 15:19
  • $\begingroup$ Alternatively, you could Get the file via a pipe, preprocessing it with sed or similar. $\endgroup$ – Oleksandr R. Nov 22 '12 at 15:30
  • 3
    $\begingroup$ Perhaps something like <<"!sed 's/e/*^/gI' < file.m"? Obviously you should be careful when doing this if you have other occurrences of "e" in the file. $\endgroup$ – Oleksandr R. Nov 22 '12 at 15:47

Similar to Rolf's method:

string = "f[38.67]=-2.5387862698183892298317350539374412777263289550697e-05;";

StringReplace[string, {"e+" :> "*^", "e-" :> "*^-"}];


?? f

f[38.67] = -0.000025387862698183892298317350539374412777263289550697

Depending on your data you may want a more specific pattern, e.g.:

  {a : NumberString ~~ "e" ~~ b : NumberString :> a <> "*^" <> b}]
  • 2
    $\begingroup$ Regex fun: StringReplace[string, RegularExpression["e([+-]?)(\\d+)"] :> "*^$1$2"] $\endgroup$ – J. M. is in limbo Nov 23 '12 at 2:43
  • $\begingroup$ @J.M. you are a glutton for punishment, aren't you! $\endgroup$ – Oleksandr R. Nov 24 '12 at 20:39
  • $\begingroup$ @Oleksandr... but I like regexes! :D Also, I like the generality: it can handle all of "2.9e5", "1.7e+2", and "3.16e-3". $\endgroup$ – J. M. is in limbo Nov 25 '12 at 1:22

Import usually automatically converts the e format to powers of. You can use ImportString with the "Table" or "List" type:

ImportString["-2.5387862698183892298317350539374412777263289550697e-05", "Table"]



ImportString["1.002e-26", "Table"]


  • $\begingroup$ thanks, but what if I want the input to initialize this function f rather than just reading the RHS values and putting them in a list? $\endgroup$ – fpghost Nov 22 '12 at 13:29
  • $\begingroup$ I had previously just been using Get to do this. $\endgroup$ – fpghost Nov 22 '12 at 14:21

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.