How to read the indivual elements of a column data?

1 次查看(过去 30 天)
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

采纳的回答

Azzi Abdelmalek
Azzi Abdelmalek 2012-9-24
编辑:Azzi Abdelmalek 2012-9-24
year=cellfun(@(y) y(1:2),x,'uni',false)
day=cellfun(@(y) y(3:end),x,'uni',false)

更多回答(3 个)

Jan
Jan 2012-9-24
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 2012-9-24
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 个评论
Hamza
Hamza 2012-9-24
Thanks Rodrigo. It is a bit too complex for a simple problem. Below two solutions worked great and did the job.

请先登录,再进行评论。


Andrei Bobrov
Andrei Bobrov 2012-9-24
编辑:Andrei Bobrov 2012-9-24
t = str2double(x)';
year1 = fix(t/1000);
day1 = t - year1*1000;

类别

Help CenterFile Exchange 中查找有关 Data Type Identification 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by