I am creating a date file using the following script, i want it to print DATES[] in the file my_dates.txt but it's only printing one date which is 2.0171e+09, that is when i type A(1,1)...i pleading for help?
1 view (last 30 days)
Show older comments
for iy = 2005:2017
yr = num2str(iy);
for im = 1:12
if im < 10
mn = sprintf('0%s',num2str(im));
else
mn = num2str(im);
end
switch im
case {1 3 5 7 8 10 12}
M_END = 31;
case {4 6 9 11}
M_END = 30;
otherwise
%----------------------------------------------------------
% Check whether this is a leap year or not and then assign
% the appropriate month end.
%----------------------------------------------------------
ny = str2num(yr);
ly = isequal(floor(ny/4)*4,ny);
if ly == 1
M_END = 29;
else
M_END = 28;
end
end
for id = 1:M_END
if id < 10
dy = sprintf('0%s',num2str(id));
else
dy = num2str(id);
end
dt = strcat(yr,mn,dy); ndt = str2num(dt);
for ih = 0:6:18
if ih < 10
hr = sprintf('0%s',num2str(ih));
else
hr = num2str(ih);
end
DATES=[];
Date_STR= strcat(dt,hr);
Date_num= str2num(Date_STR);
end
end
end
end
DATES=vertcat(DATES,[Date_num]);
fn=sprintf('my_dates.txt');
fid=fopen(fn,'w');
fprintf(fid,'%10.2f\n',DATES');
fclose(fid);
0 Comments
Accepted Answer
Are Mjaavatten
on 15 Jul 2018
The problem with your file is that you overwrite your Date_num value whenever you calculate a new one. Your DATA variable has no function inside the loop, After the loops, DATA will only replicate Date_num, and is thus superfluous.
Your approach is fine as a Matlab exercise, but for serious work I recommend that you type 'doc datetime' and learn about this and other built-in time and date functions.
Here is version of your code that will work and hopefully do what you want:
Date_num = [];
for iy = 2005:2017
yr = num2str(iy);
for im = 1:12
if im < 10
mn = sprintf('0%s',num2str(im));
else
mn = num2str(im);
end
switch im
case {1 3 5 7 8 10 12}
M_END = 31;
case {4 6 9 11}
M_END = 30;
otherwise
%----------------------------------------------------------
% Check whether this is a leap year or not and then assign
% the appropriate month end.
%----------------------------------------------------------
ny = str2num(yr);
ly = isequal(floor(ny/4)*4,ny);
if ly == 1
M_END = 29;
else
M_END = 28;
end
end
for id = 1:M_END
if id < 10
dy = sprintf('0%s',num2str(id));
else
dy = num2str(id);
end
dt = strcat(yr,mn,dy); ndt = str2num(dt);
for ih = 0:6:18
if ih < 10
hr = sprintf('0%s',num2str(ih));
else
hr = num2str(ih);
end
% DATES=[];
Date_STR= strcat(dt,hr);
Date_num= [Date_num;str2num(Date_STR(end,:))];
end
end
end
end
% DATES=vertcat(DATES,[Date_num]);
fn=sprintf('my_dates.txt');
fid=fopen(fn,'w');
fprintf(fid,'%10.2f\n',Date_num);
fclose(fid);
More Answers (0)
See Also
Categories
Find more on Multiobjective Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!