Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

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

Search the Archive

Re: Importing a file and extracting data

  • To: mathgroup at smc.vnet.net
  • Subject: [mg131161] Re: Importing a file and extracting data
  • From: Helen Read <readhpr at gmail.com>
  • Date: Sat, 15 Jun 2013 04:20:28 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <kpeln9$htb$1@smc.vnet.net>

For starters, make sure you import your file as a Table.

data = Import["filename", "Table"]

Now find where Run 1 and Run 2 begin.


p1 = Position[data, {"Run", 1}][[1, 1]]

p2 = Position[data, {"Run", 2}][[1, 1]]


For Run 1, we want the part of the table from just after p1 to right 
before p2. Delete the blank rows {} while you are at it.

run1 = DeleteCases[data[[p1 + 1 ;; p2 - 1]], {}]


For Run 2, we want everything from right after p2 to the end.

run2 = DeleteCases[data[[p2 + 1 ;; Length[data]]], {}]

So now we have two tables, run1 and run2. We need to extract the 
temperature and time from each row of the tables. The rows look for 
example like the following.

{"Tc_Naph_83_2C", 3.758, "ns"}

The basic idea is to construct a function to operate on one row of the 
table, then Map it across the table. You can do this quite compactly 
using pure functions, but if you are new to this sort of thing you might 
find it easier to follow if you write an explicit function that operates 
on one row of the table at a time. I will use x to represent one row.

To begin, we get the first two parts of row x.

x[[1]] contains the temperature information (but needs some processing).
x[[2]] is the time.

In the example row, x[[1]] is  "Tc_Naph_83_2C"

Use StringSplit on the "_"  to get at the pieces.

StringSplit["Tc_Naph_83_2C", "_"]
results in {"Tc", "Naph", "83", "2C"}

Now, we get the 2nd-to-the-last part of this (the "83" in the example), 
and the last part (the "2C"). We drop the last character from the "2C". 
Then join the "83" with a "." and the "2". Finally, use ToExpression to 
convert "83.2" from a string to a number.

Putting this all together, here is a function to extract the temperature 
and time from one row of the table. I've used some local variables 
{split,temperature,time} to keep track of things as we go.

f[x_] := Module[{split, temperature, time},
   time = x[[2]];
   split = StringSplit[x[[1]], "_"];
   temperature =
    ToExpression[
     StringJoin[split[[-2]], ".", StringDrop[split[[-1]], -1]]];
   {temperature, time}
   ]

The input of the function, x, represents one row of the table. The 
output is the ordered pair {temperature,time}

Test it out on a single row.

f[{"Tc_Naph_84_2C", 3.74`, "ns"}]

Now simply Map the function over each run.

Map[f, run1]

Map[f,run2]


Helen Read
University of Vermont


On 6/14/2013 4:54 AM, howardfink at gmail.com wrote:
> I have a series of files of this form:
>
> June 7, 2013
> Tc+Naphthalene  vs Temperature (oC)
>
> Run 1
> Tc_Naph_84_2C			3.740 ns
> Tc_Naph_87_1C			3.731 ns
> Tc_Naph_89_9C			3.720 ns
> Tc_Naph_92_9C			3.704 ns
> Tc_Naph_94_7C			3.687 ns
> Tc_Naph_97_6C			3.694 ns
>
>
> Run 2
> Tc_Naph_83_2C			3.758 ns
> Tc_Naph_83_4C			3.750 ns
> Tc_Naph_86_4C			3.728 ns
> Tc_Naph_88_1C			3.725 ns
> Tc_Naph_90_2C			3.716 ns
> Tc_Naph_93_1C			3.704 ns
> Tc_Naph_94_7C			3.673 ns
> Tc_Naph_97_7C			3.684 ns
> Tc_Naph_97_9C			3.665 ns
>
>
>
>
> I used an Import command to read in the file, but now I am just sitting and=
>   staring, without a clue how to get the 84_2 converted to the number 84.2,e=
> tc. and ending up with two lists: Run 1 and Run 2, consisting of pairs of t=
> emperature and time.  The temperature will eventually be converted to 1/abs=
> olute temperature.
>
> I've read lots and lots of help, thumbed through dozens of pages of a Mathe=
> matica 5 manual, and don't know where to start.  I'm trying to help a 90-ye=
> ar-old chemistry professor, who is currently using a calculator, but  there=
>   will be dozens of runs of this experiment.
>




  • Prev by Date: Re: Position
  • Next by Date: Re: Importing a file and extracting data
  • Previous by thread: Re: Importing a file and extracting data
  • Next by thread: Re: Importing a file and extracting data