MathGroup Archive 1996

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: how to read real numbers in 1.0000e+00 notation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg4161] Re: [mg4108] how to read real numbers in 1.0000e+00 notation
  • From: support (Tom Zeller)
  • Date: Sat, 8 Jun 1996 13:24:45 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

>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)
>fedort at 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



==== [MESSAGE SEPARATOR] ====


  • Prev by Date: Re: Vector field plotting on Mathematica ??!
  • Next by Date: Using tabs in Notebooks
  • Previous by thread: Re: how to read real numbers in 1.0000e+00 notation
  • Next by thread: a big matrix