hunterdavid
hunterdavid

Reputation: 13

Matlab substring

I am trying to get average a specific value in a long string and cannot figure out how to pull a value out of the middle of the string. I would like to pull out the 27 from this and the other strings and add them

2015-10-1,33,27,20,29,24,20,96,85,70,30.51,30.40,30.13,10,9,4,10,6,,T,5,Snow,35 2015-10-1,33,27,20,29,24,20,96,85,70,30.51,30.40,30.13,10,9,4,10,6,,T,5,Snow,35 2015-10-2,37,32,27,32,27,23,92,80,67,30.35,30.31,30.28,10,10,7,7,4,,T,8,Rain-Snow,19 2015-10-3,39,36,32,35,33,29,100,90,79,30.30,30.17,30.11,10,7,0,8,3,,0.21,8,Fog-Rain,13 2015-10-4,40,37,34,38,36,33,100,96,92,30.23,30.19,30.14,2,1,0,6,0,,0.13,8,Fog-Rain,27 2015-10-5,46,38,30,38,34,30,100,91,61,30.19,30.08,29.93,10,7,0,6,2,,T,6,Fog-Rain,23

fid = fopen('MonthlyHistory.html');

for i=1:2
  str = fgets(fid);
  c = strsplit(str,',');
  mean=mean+c;
  end
fprintf('Average Daily Temperature: %d\n',mean);

Upvotes: 1

Views: 745

Answers (2)

Matthew Gunn
Matthew Gunn

Reputation: 4519

Method 1: use readtable

I'm guessing this is pulled from weather underground? Take your csv file and make sure it is saved with a .csv ending. Then what I would do is:

my_data = readtable('MonthlyHistory.csv');

This reads the whole file into the highly convenient table variable type. Then you can do:

average_daily_temp = my_data.MeanTemperatureF; %or whatever it is called in the table

I find tables are a super convenient way to keep track of tabular data. (plus readtable is pretty good).

Method 2: continue your approach...

fid = fopen('mh2.csv');

str = fgets(fid); % May need to read off a few lines to get to the
str = fgets(fid); % numbers

my_data = [];     %initialize an empty array

while(true)
    str = fgets(fid);  % read off a line
    if(str == -1)      % if str is -1, which signifies end of file
        break;            %exit loop
    end    
    ca   = strsplit(str,',');  % split string into a cell array of strings
    my_data(end+1,:) = str2num(ca{3}); % convert the 3rd element to a number and store it

end

fclose(fid);

Now my_data is an array holding the 3rd element of each line.

Upvotes: 2

David
David

Reputation: 8459

You can use textscan, you might be able to simplfy your code using this as well, but for a single string, it works like this:

S='2015-10-1,33,27,20,29,24,20,96,85,70,30.51,30.40,30.13,10,9,4,10,6,,T,5,Snow,35'
T=textscan(S,'%s','Delimiter',',')
str2double(T{1}{3}) %// the value we want is the 3rd field

Upvotes: 2

Related Questions