|
From: | financial engineer |
Subject: | RE: reading data using fgets in while loop |
Date: | Mon, 12 Mar 2012 13:36:15 -0400 |
> Date: Mon, 12 Mar 2012 10:17:32 -0700 > From: address@hidden > To: address@hidden > Subject: Re: reading data using fgets in while loop > > > newbie_octave wrote > > > > I have a .csv file with the following data > > > > 01/03/2012,H (Mar 12),26.750000,2584 > > 01/04/2012,H (Mar 12),26.280000,2330 > > 01/05/2012,H (Mar 12),26.000000,3198 > > 01/06/2012,H (Mar 12),25.500000,3045 > > 01/09/2012,H (Mar 12),25.350000,2314 > > 01/10/2012,H (Mar 12),25.050000,2685 > > > > and I am a newbie to octave. I ran the following command to read the above > > data into octave > > > > X=csvread("/tmp/hist.csv") > > > > but it returns the following matrix. > > > > 1.0000e+00 0.0000e+00 2.6750e+01 2.5840e+03 > > 1.0000e+00 0.0000e+00 2.6280e+01 2.3300e+03 > > 1.0000e+00 0.0000e+00 2.6000e+01 3.1980e+03 > > 1.0000e+00 0.0000e+00 2.5500e+01 3.0450e+03 > > 1.0000e+00 0.0000e+00 2.5350e+01 2.3140e+03 > > 1.0000e+00 0.0000e+00 2.5050e+01 2.6850e+03 > > > > > > Obviously, it is not reading the text correctly > > so I am now using fgets() as follows: > > > > fid=fopen(fname); > > fout="out.mat" > > global tline; > > global tempstr; > > while 1 > > tline = fgets(fid); > > sep=","; > > tempstr=strsplit(tline, sep); > > dt=tempstr(1); > > cname=tempstr(2); > > price=str2double(tempstr(3)); > > volume=str2double(tempstr(4)); > > if ~ischar(tline), break,end; > > end > > disp(tline); > > fclose(fid); > > > > but when I run the script, it returns -1 due to disp(tline) being after > > the end. I want to be able to compute the volume-weighted average price, > > and not have to do it all within the script that reads the data from the > > file. But, given that I cannot access any of the variables outside the > > while loop, I am stuck. Ideally, I could have used csvread() or dlmread() > > but that is messing up the string fields in my file. Can anyone please > > suggest how I fix this so I can manipulate the variables outside the while > > loop that gets the data from the .csv file. thanks! > > > > I also get the following error in using strsplit, and I don't understand > > what mistake I am making as I am following the usage guidelines. I tried > > split, but I am advised to use strsplit. > > octave-3.2.4:110> strsplit(tline,sep) > > error: Invalid call to strsplit. Correct usage is: > > > > -- Function File: [S] = strsplit (P, SEP, STRIP_EMPTY) > > > > > > Additional help for built-in functions and operators is > > available in the on-line version of the manual. Use the command > > `doc <topic>' to search the manual index. > > > > Help and information about Octave is also available on the WWW > > at http://www.octave.org and via the address@hidden > > mailing list. > > > > There are a few more text reading functions that may help out. > E.g., textread: > (applied to your data in a file txt.csv) > > octave-3.6.1.exe:2> [a, b, c, d] = textread ('tst.csv', "%s %s %f %d", > "delimiter", ",") > a = > { > [1,1] = 01/03/2012 > [2,1] = 01/04/2012 > [3,1] = 01/05/2012 > [4,1] = 01/06/2012 > [5,1] = 01/09/2012 > [6,1] = 01/10/2012 > } > b = > { > [1,1] = H (Mar 12) > [2,1] = H (Mar 12) > [3,1] = H (Mar 12) > [4,1] = H (Mar 12) > [5,1] = H (Mar 12) > [6,1] = H (Mar 12) > } > c = > > 26.750 > 26.280 > 26.000 > 25.500 > 25.350 > 25.050 > > d = > > 2584 > 2330 > 3198 > 3045 > 2314 > 2685 > > With some postprocessing (e.g., datenum (a, "dd/mm/yyyy") ) you can get any > output you want. > > Philip > > > -- > View this message in context: http://octave.1599824.n4.nabble.com/reading-data-using-fgets-in-while-loop-tp4464844p4466694.html > Sent from the Octave - General mailing list archive at Nabble.com. > _______________________________________________ > Help-octave mailing list > address@hidden > https://mailman.cae.wisc.edu/listinfo/help-octave thanks Philip, ...I realize that I don't have textread.m in my io folder. can you tell me where can I download it. Bobby |
[Prev in Thread] | Current Thread | [Next in Thread] |