Re:trying to pull numbers out of a string from a file...
- To: mathgroup at smc.vnet.net
- Subject: [mg36624] Re:[mg36595] trying to pull numbers out of a string from a file...
- From: "tgarza01 at prodigy.net.mx" <tgarza01 at prodigy.net.mx>
- Date: Fri, 13 Sep 2002 23:33:36 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hello, Rob:
First of all, I used ReadList directly, with Word instead of String, and
with the option WordSeparators -> None, like this (I presume your file is
adequately located, so that there is no problem in finding it):
In[1]:=
a = ReadList["197-tst.txt", Word, RecordLists -> True, WordSeparators ->
None];
This allowed me to examine your records and I found out that in this way
each record comes out as a list of length 1:
In[2]:=
Head[a[[1]]]
Out[2]=
List
In[3]:=
Length[a[[1]]]
Out[3]=
1
That is,
In[3]:=
a[[1]]
Out[3]=
{"aEX-004 2002197 0 0 0 5935.80 5946.66 27.06 -1281.9 -229. 321.
317. 367. -115. 126. 146. -410. \
-426.000000EF 75."}
In[4]:=
StringLength[a[[1,1]]]
Out[4]=
140
and the characters you want are
In[5]:=
StringTake[a[[1,1]], {25, 110}]
Out[5]=
"5935.80 5946.66 27.06 -1281.9 -229. 321. 317. 367. -115.
126. 146."
So far, so good. It seems that you want these 11 numbers, OK? The problem
now, I think, is that this is just a string and I can think of no easy way
to convert it precisely into a list of 11 real numbers. Then, I suggest you
read the file in a different way, without the WordSeparators option:
In[6]:=
b=ReadList["197-tst.txt",Word,RecordLists -> True];
In[7]:=
b[[1]]
Out[7]=
{aEX-004,2002197,0,0,0,5935.80,5946.66,27.06,-1281.9,-229.,321.,317.,367.,-\
115.,126.,146.,-410.,-426.000000EF,75.}
In[8]:=
Head[b[[1]]]
Out[8]=
List
In[9]:=
Length[b[[1]]]
Out[9]=
19
so that each record is now a list of 19 strings. What you want is strings 6
to 16, but converted to reals (unless I'm being presumptuous). This will
achieve that:
In[10]:=
ToExpression[Take[b[[1]],{6,16}]]
Out[10]=
{5935.8,5946.66,27.06,-1281.9,-229.,321.,317.,367.,-115.,126.,146.}
Now you have a nice list of real numbers to work with. You can do this for
the whole file like this:
In[11]:=
ToExpression[Take[#,{6,16}]&/@b];
I hope this will solve your problem.
Tomas Garza
Mexico City
> ----- Original Message -----
> From: "1.156" <rob at piovere.com>
To: mathgroup at smc.vnet.net
> Sent: Friday, September 13, 2002 12:14 AM
> Subject: [mg36624] [mg36595] trying to pull numbers out of a string from a file...
>
> > I've got to extract some numbers from a file that are in lines of text.
> Since the line contents are not numbers, I presume I must pull the line
out
> as a string. Here I start by pulling out just one line:
> >
> > inFile = OpenRead["197-tst.txt"]
> > y = ReadList[inFile, String, 1, RecordLists -> True]
> > Close[inFile];
> >
> > This appears to pull in a line. Now I want to take characters 25 to 110
to
> get just the stuff I want:
> > y1=StringTake[y ,{25,110}];
> >
> > Here's the output. StringTake doesn't seem to work.
> >
> > StringTake[{aEX-004 2002197 0 0 0 5935.80 5946.66 27.06 -1281.9
-229.
> 321. 317. 367. -115. 126. 146. -410. -426.000000EF
75.},
> {25, 110}]
> >
> > It doesn't take loading another package as far
> > as I can tell from the help. I'm thinking that it doesn't work because
> it's trying to work on a list
> > rather than a string. I've tried Flatten, and other stuff to try to get
to
> just a string and not a list but
> > nothing has worked so far. I'm a long way from getting to those numbers
> in there but heck, I
> > can't even get to the string. Can anyone point me in the right
direction?
> >
> > Thanks, Rob
> >
--------------------------------------------------------------------
mail2web - Check your email from the web at
http://mail2web.com/ .