diff --git a/matlab/@dynSeries/save.m b/matlab/@dynSeries/save.m new file mode 100644 index 0000000000000000000000000000000000000000..67cc0aa8ceacb35b3a424072a4c79b2311fce670 --- /dev/null +++ b/matlab/@dynSeries/save.m @@ -0,0 +1,102 @@ +function save(A,basename,format) +% Saves a dynSeries object on disk. + +if nargin<3 || isempty(format) + format = 'csv'; +end + +if nargin<2 || isempty(basename) + basename = inputname(1); +end + +switch format + case 'm' + fid = fopen([basename, '.m'],'w'); + fprintf(fid,'%% File created on %s.\n',datestr(now)); + fprintf(fid,'\n'); + fprintf(fid,'FREQ__ = %s;\n',num2str(A.freq)); + fprintf(fid,'INIT__ = '' %s'';\n',A.init.format); + fprintf(fid,'\n'); + for v=1:A.vobs + fprintf(fid,'%s = [\n', A.name{v}); + fprintf(fid,'%15.8g\n',A.data(1:end-1,v)); + fprintf(fid,'%15.8g];\n\n',A.data(end,v)); + end + fclose(fid); + case 'mat' + FREQ__ = A.freq; + INIT__ = A.init.format; + str = []; + for v=1:A.vobs + str = [str, A.name{v} ' = A.data(:,' num2str(v) ');' ]; + end + eval(str); + save([basename '.mat'],'INIT__','FREQ__',A.name{:}); + case 'csv' + fid = fopen([basename, '.csv'],'w'); + fprintf(fid,', %s', A.name{:}); + fprintf(fid,'\n'); + for t=1:A.nobs + date = A.init+(t-1); + str = sprintf(', %15.8g',A.data(t,:)); + fprintf(fid, '%s%s\n',date.format,str); + end + fclose(fid); +end + +%@test:1 +%$ % Define a data set. +%$ A = [transpose(1:10),2*transpose(1:10)]; +%$ +%$ % Define names +%$ A_name = {'A1';'A2'}; +%$ +%$ % Instantiate a time series object. +%$ try +%$ ts1 = dynSeries(A,[],A_name,[]); +%$ save(ts1,[],'csv'); +%$ t = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ % Define a data set. +%$ A = [transpose(1:10),2*transpose(1:10)]; +%$ +%$ % Define names +%$ A_name = {'A1';'A2'}; +%$ +%$ % Instantiate a time series object. +%$ try +%$ ts1 = dynSeries(A,[],A_name,[]); +%$ save(ts1,[],'m'); +%$ t = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ % Define a data set. +%$ A = [transpose(1:10),2*transpose(1:10)]; +%$ +%$ % Define names +%$ A_name = {'A1';'A2'}; +%$ +%$ % Instantiate a time series object. +%$ try +%$ ts1 = dynSeries(A,[],A_name,[]); +%$ save(ts1,[],'m'); +%$ t = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ T = all(t); +%@eof:3 diff --git a/matlab/@dynSeries/subsref.m b/matlab/@dynSeries/subsref.m index 64e17364a911df3895a393b2566364a360450211..66772dec691bac8c1cd3f83aa81a03f5943fc14d 100644 --- a/matlab/@dynSeries/subsref.m +++ b/matlab/@dynSeries/subsref.m @@ -69,6 +69,9 @@ if length(S)==1 && isequal(S.type,'.') us = builtin('subsref', ts, S); case {'log','exp'} % Give "dot access" to public methods. us = feval(S.subs,ts); + case {'save'} + us = NaN; + save(ts); otherwise % Extract a sub-object by selecting one variable. ndx = strmatch(S.subs,ts.name); if ~isempty(ndx) @@ -119,9 +122,17 @@ end if (length(S)==1) && isequal(S(1).type,'{}') us = extract(ts,S(1).subs{:}); + return +end + +if (length(S)==2) && isequal(S(1).subs,'save') && isequal(S(1).type,'.') && isequal(S(2).type,'()') + us = NaN; + save(ts,S(2).subs{:}); + return end + %@test:1 %$ % Define a data set. %$ A = [transpose(1:10),2*transpose(1:10)]; @@ -306,3 +317,40 @@ end %$ T = all(t); %@eof:6 +%@test:7 +%$ % Define a data set. +%$ A = [transpose(1:10),2*transpose(1:10)]; +%$ +%$ % Define names +%$ A_name = {'A1';'A2'}; +%$ +%$ % Instantiate a time series object. +%$ try +%$ ts1 = dynSeries(A,[],A_name,[]); +%$ ts1.save; +%$ t = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ T = all(t); +%@eof:7 + +%@test:8 +%$ % Define a data set. +%$ A = [transpose(1:10),2*transpose(1:10)]; +%$ +%$ % Define names +%$ A_name = {'A1';'A2'}; +%$ +%$ % Instantiate a time series object. +%$ try +%$ ts1 = dynSeries(A,[],A_name,[]); +%$ ts1.save('test_generated_data_file','m'); +%$ t = 1; +%$ catch +%$ t = 0; +%$ end +%$ +%$ T = all(t); +%@eof:8