help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: problem reading file with time-stamps


From: Ben Abbott
Subject: Re: problem reading file with time-stamps
Date: Wed, 14 Dec 2011 08:10:07 -0500

On Dec 14, 2011, at 2:58 AM, BVBA NuKey Music wrote:

> 
> 
> 2011/12/14 Ben Abbott <address@hidden>
> 
> On Dec 13, 2011, at 3:22 PM, BVBA NuKey Music wrote:
> 
> > 2011/12/13 Ben Abbott <address@hidden>
> >
> >> On Dec 13, 2011, at 9:28 AM, BVBA NuKey Music wrote:
> >>
> >> > 2011/12/13 Ben Abbott <address@hidden>
> >> >
> >> >> On Dec 13, 2011, at 8:24 AM, BVBA NuKey Music wrote:
> >> >>
> >> >> > 2011/12/13 Ben Abbott <address@hidden>
> >> >> >>
> >> >> >> On Dec 13, 2011, at 7:39 AM, BVBA NuKey Music wrote:
> >> >> >>
> >> >> >> > 2011/12/13 Joanna Cheng <address@hidden>
> >> >> >> >> On Tue, Dec 13, 2011 at 7:51 PM, BVBA NuKey Music 
> >> >> >> >> <address@hidden> wrote:
> >> >> >> >> > I'm trying to read a file with four columns which has 
> >> >> >> >> > timestamps in the
> >> >> >> >> > first column:
> >> >> >> >> >
> >> >> >> >> > The data is available in the file in the following format:
> >> >> >> >> > Dec-13-09:46:45 21.4 +4.76442190E-01 8.135530E-06 1.553691E+00
> >> >> >> >> > Dec-13-09:47:12 21.4 +4.76439120E-01 8.135839E-06 1.553726E+00
> >> >> >> >> > Dec-13-09:47:39 21.4 +4.76427260E-01 8.136261E-06 1.553853E+00
> >> >> >> >> >
> >> >> >> >> > first field is a timestamp then a space followed by a 
> >> >> >> >> > temperature then a
> >> >> >> >> > space ...
> >> >> >> >> >
> >> >> >> >> > As you can see here below, octave doesn't accept the file 
> >> >> >> >> > because of the
> >> >> >> >> > timestamps,
> >> >> >> >> > can anyone here help me solve this problem?
> >> >> >> >> >
> >> >> >> >> > octave:1> y=load('x7r0.7vac0vdc.dat');
> >> >> >> >> > error: load: failed to read matrix from file `x7r0.7vac0vdc.dat'
> >> >> >> >> > error: evaluating assignment expression near line 1, column 2
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> I actually wrote a bit of code to do this with csv files. See 
> >> >> >> >> here:
> >> >> >> >> http://www.octave.org/wiki/index.php?title=Tips_and_tricks#Load_Comma_Separated_Values_.28.2A.csv.29_files
> >> >> >> >>
> >> >> >> >> Sample output as below:
> >> >> >> >>
> >> >> >> >> octave:19> A=textread("timestamps.txt", "%d", "delimiter", " ");
> >> >> >> >> octave:20> B=textread("timestamps.txt", "%s", "delimiter", " ");
> >> >> >> >> octave:21> inds = isnan(A);
> >> >> >> >> octave:22> B(!inds) = num2cell(A(!inds));
> >> >> >> >> octave:23> B
> >> >> >> >> B =
> >> >> >> >> {
> >> >> >> >>  [1,1] = Dec-13-09:46:45
> >> >> >> >>  [2,1] =  21.400
> >> >> >> >>  [3,1] =  0.47644
> >> >> >> >>  [4,1] = 8.1355e-006
> >> >> >> >>  [5,1] =  1.5537
> >> >> >> >>  [6,1] = Dec-13-09:47:12
> >> >> >> >>  [7,1] =  21.400
> >> >> >> >>  [8,1] =  0.47644
> >> >> >> >>  [9,1] = 8.1358e-006
> >> >> >> >>  [10,1] =  1.5537
> >> >> >> >>  [11,1] = Dec-13-09:47:39
> >> >> >> >>  [12,1] =  21.400
> >> >> >> >>  [13,1] =  0.47643
> >> >> >> >>  [14,1] = 8.1363e-006
> >> >> >> >>  [15,1] =  1.5539
> >> >> >> >> }
> >> >> >> >> octave:24> class(B)
> >> >> >> >> ans = cell
> >> >> >> >> octave:25> class(B{1})
> >> >> >> >> ans = char
> >> >> >> >> octave:26> class(B{2})
> >> >> >> >> ans = double
> >> >> >> >>
> >> >> >> >> Hope that helps,
> >> >> >> >> Joanna
> >> >> >> >
> >> >> >> > Thanks for replying but if I try out your code I get the following 
> >> >> >> > errors:
> >> >> >> > octave:3> A=textread("timestamps.txt", "%d", "delimiter", " ")
> >> >> >> > error: `textread' undefined near line 3 column 3
> >> >> >> > error: evaluating assignment expression near line 3, column 2
> >> >> >> >
> >> >> >> > and
> >> >> >> >
> >> >> >> > octave:3> B=textread("timestamps.txt", "%s", "delimiter", " ");
> >> >> >> > error: `textread' undefined near line 3 column 3
> >> >> >> > error: evaluating assignment expression near line 3, column 2
> >> >> >> >
> >> >> >> > Any idea what is going wrong?
> >> >> >> >
> >> >> >> > thanks in advance
> >> >> >> > nukey
> >> >> >>
> >> >> >> (please reply below so that others arriving late can more easilly 
> >> >> >> follow along)
> >> >> >>
> >> >> >> I suspect you are using Octave 3.2 ? correct?
> >> >> >>
> >> >> >> Joanna is likely using Octave 3.4.x or the developers sources 
> >> >> >> (3.6.x).
> >> >> >>
> >> >> >> If you are unable to upgrade your version of Octave, can you install 
> >> >> >> the io package? You'll want to be sure that the version is < 1.0.13. 
> >> >> >> The versions more recent that this do not include the textread() 
> >> >> >> function (it was moved to Octave's core).
> >> >> >>
> >> >> >> Ben
> >> >> >
> >> >> > OK, I installed octave-io but I'm still facing problems:
> >> >> > octave:5> A=textread("timestamps.txt", "%d", "delimiter", " ");
> >> >> > error: Unknown property delimiter.
> >> >> > error: Invalid argument specified
> >> >> >
> >> >> > So I removed the word "delimiter" which gave me:
> >> >> > octave:7> A=textread("timestamps.txt", "%d", " ")
> >> >> > A =
> >> >> >
> >> >> >    3.6074e-313
> >> >> >    3.6074e-313
> >> >> >    3.6074e-313
> >> >> >
> >> >> > octave:8> A=textread("timestamps.txt", "%s", " ")
> >> >> > A =
> >> >> >
> >> >> > {
> >> >> >   [1,1] = Dec-13-09:46:45
> >> >> >   [2,1] = Dec-13-09:47:12
> >> >> >   [3,1] = Dec-13-09:47:39
> >> >> > }
> >> >> >
> >> >> >
> >> >> > But how can I get my data in a matrix?
> >> >> >
> >> >> > thanks in advance
> >> >> > nukey
> >> >> >
> >> >>
> >> >> *** please reply below so that those arriving late can follow along ***
> >> >>
> >> >> This version of textread() may not support the "delimiter" option. 
> >> >> However, whitespace is treated as a delimiter by default, so you don't 
> >> >> need to specify it.
> >> >>
> >> >> The data as a string followed by 4 floats (correct?). So the commands 
> >> >> below should work.
> >> >>
> >> >>        fmt = "%s %f %f %f %f";
> >> >>        [A, B, C, D, E] = textread ("timestamp.txt", fmt);
> >> >>
> >> >> Ben
> >> >
> >> > Wow, that works great, is there a way to achieve the following too?
> >> > y=[A B C D E]
> >> > I noticed that y=[B C D E] works but I can't add the first column, 
> >> > probably because it is of a different data-type
> >> >
> >>
> >> *** please reply below so that those arriving late can follow along ***
> >>
> >> Since you are mixing character data with doubles, you'll need to use a 
> >> cell array for that.
> >>
> >>        y = {A, B, C, D, E};
> >>
> >> Ben
> >
> > Thank you Ben, this works to a certain level
> > but when I write back 'y' (normally after doing some manipulations on  the 
> > data first of course) like this:
> > save('test.dat','y');
> > I don't get my space separated values format back that way in the file 
> > test.dat
> > I just don't understand why it is not possible to read in my blank 
> > separated datafile in matrix-form, do some manipulations on the columns and 
> > then write it back in the original format as another file.
> >
> > thanks in advance
> > nukey
> 
> The save() command doesn't work like that. It is intended to save data of 
> different types. When saved, the type of data, and variable name is included.
> 
> The reason you can't read the data in matrix form is because a matrix 
> represent numeric data, not character data (your first column is character).
> 
> To preserve the format of your file, you can ...
> 
>        fid = fopen ("data.dat");
>        for n = 1:numel(A)
>                fprintf (fid, "%s %g %g %g %g\n", A{n}, B(n), C(n), D(n), E(n))
>        endfor
>        fclose (fid)
> 
> Ben
> 
> 
> I tried out the code above but it doesn't work well as you can see below
>  
>  octave:3> for n = 1:numel(A)
> > fprintf (fid, "%s %g %g %g %g\n", A{n}, B(n), C(n), D(n), E(n))
> > endfor
> error: `A' undefined near line 3 column 17
> error: evaluating argument list element number 1
> error: invalid limit value in colon expression
> error: evaluating colon expression near line 3 column 9
> error: evaluating for command near line 3, column 1

Before running that the part from earlier in the thread is needed.

         fmt = "%s %f %f %f %f";
        [A, B, C, D, E] = textread ("timestamp.txt", fmt);

Ben





reply via email to

[Prev in Thread] Current Thread [Next in Thread]