Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[mg4108] how to read real numbers in 1.0000e+00 notation

190 views
Skip to first unread message

Tom Zeller

unread,
Jun 6, 1996, 3:00:00 AM6/6/96
to

>I have to read into mathematica ASCII data files containing floating
>point numbers in the notation
>that uses the character "e" to separate mantissa and exponent. Is there a
>mathematica function that converts this into mathematica's proper
>representation, or do I have to use sed or something similar to
>replace e's by something like "*10^" ?
>
>Thank you.
>--
>--
>Fedor Trintchouk (609) 258-4745 (office/voice)
>Princeton University (609) 258-1089 (lab)
>fed...@princeton.edu (609) 258-1139 (fax)

Fedor,

Here's one of many ways to approach this problem.

Here's the test file:

In[18]:=!!enums
6.40624e+03
3.24578e+05
1.07547e+15
1.29759e+27
4.2454e+28
9.20689e+25
7.47152e+04
4.66307e+04
6.45702e+27
7.65851e+11

Read the numbers in as Word, i.e string data.
In[19]:=wordlist = ReadList["enums", Word]
Out[19]={6.40624e+03, 3.24578e+05, 1.07547e+15, 1.29759e+27,
4.2454e+28, 9.20689e+25, 7.47152e+04, 4.66307e+04,
6.45702e+27, 7.65851e+11}

Make up a function that replaces the e notation.

In[20]:=enomore[x_]:= StringReplace[x, "e+" -> " 10^"]

Map that function onto the list.

In[21]:=wordlist = Map[enomore, wordlist]
Out[21]={6.40624 10^03, 3.24578 10^05, 1.07547 10^15,
1.29759 10^27, 4.2454 10^28, 9.20689 10^25,
7.47152 10^04, 4.66307 10^04, 6.45702 10^27,
7.65851 10^11}

Change the strings to numbers using ToExpression.

In[22]:=numlist = ToExpression[wordlist]

Out[22]=
15 27 28
{6406.24, 324578., 1.07547 10 , 1.29759 10 , 4.2454 10 ,

25 27
9.20689 10 , 74715.2, 46630.7, 6.45702 10 ,

11
7.65851 10 }

The same thing can be done in one command, if you use a pure function inside
string replace.

In[23]:= numlist2 = ToExpression[
Map[ StringReplace[#, "e+" -> " 10^"]&, ReadList["enums", Word]
]
]
Out[23]=
15 27 28
{6406.24, 324578., 1.07547 10 , 1.29759 10 , 4.2454 10 ,

25 27 11
9.20689 10 , 74715.2, 46630.7, 6.45702 10 , 7.65851 10 }

In[24]:= numlist2 == numlist
Out[24]= True

Hope this helps.

Tom Zeller
Wolfram Research Technical Support


0 new messages