How to read the indivual elements of a column data?

2 views (last 30 days)
Dear All
I have a data say,
x= '96318.74847837'
'96319.62211352'
'96319.62351606'
'96319.62356237'
'96320.05952563'
'96320.49676119'
I want to read all the elements individually. For e.g. '96318.74847837'. In this '96' is the year and '318.74847837' is day of year. I want to display the years and day of years separately and then plot them against another set of data say 'longitude' L= 19.1, 20,19.5,20.1,20.0,20.1
Please help. Thanks

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 24 Sep 2012
Edited: Azzi Abdelmalek on 24 Sep 2012
year=cellfun(@(y) y(1:2),x,'uni',false)
day=cellfun(@(y) y(3:end),x,'uni',false)

More Answers (3)

Jan
Jan on 24 Sep 2012
You can do this numerically or as string operation:
x = {'96318.74847837', ...
'96319.62211352', ...
'96319.62351606', ...
'96319.62356237', ...
'96320.05952563', ...
'96320.49676119'};
c = char(x);
year = cellstr(c(:, 1:2));
day = cellstr(c(:, 3:end));
% Or:
num = sscanf(sprintf('%s*', x{:}), '%g*');
day = rem(num, 1000);
year = round(num - day);

Rodrigo
Rodrigo on 24 Sep 2012
It's not clear, but it seems like x is a cell array containing strings. If you want to extract the year and the day then you might do something like:
year=zeros([1,numel(x)]); day=year; for p=1:numel(x) year(p)=str2double(x{p}(1:2)); day(p)=str2double(x{p}(3:end)); end
if you have multiple years, it may make sense to do:
day=day+365.25*(year-min(year));
so that you don't get wrapping of the dates
  1 Comment
Hamza
Hamza on 24 Sep 2012
Thanks Rodrigo. It is a bit too complex for a simple problem. Below two solutions worked great and did the job.

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 24 Sep 2012
Edited: Andrei Bobrov on 24 Sep 2012
t = str2double(x)';
year1 = fix(t/1000);
day1 = t - year1*1000;

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!