diff --git a/matlab/@dynDate/dynDate.m b/matlab/@dynDate/dynDate.m index 7851d2818..9da7d0a27 100644 --- a/matlab/@dynDate/dynDate.m +++ b/matlab/@dynDate/dynDate.m @@ -144,31 +144,45 @@ switch nargin date = dynDate(); if isnumeric(b) && isscalar(b) && ismember(b,[1,4,12,52]) date.freq = b; - if ~isnumeric(a) - error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be numeric!']) - end - if ~all(isint(a)) - error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be a scalar or a 1*2 vector of integers!']) - end - if ~isequal(size(a),[1,2]) - if b>1 - error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be a 1*2 vector of integers.']) - end - else - if isequal(b,1) && isequal(a(2),1) - error(['dynDate:: Can''t instantiate the class! The second element of the first input argument ' inputname(a) ' must be equal to one (because freq==1)!']) - end - end - if a(2)<=0 || a(2)>b - error(['dynDate:: Can''t instantiate the class! The second element of the first argument ' inputname(a) ' must be a positive integer be <=' int2str(b) '!' ]) - end - if length(a)==1 - date.time = [a, 1]; - else - date.time = a; + elseif ischar(b) && isequal(length(b),1) && ismember(upper(b),{'Y','A','W','M','Q'}) + b = upper(b); + switch b + case {'Y','A'} + date.freq = 1; + case 'W' + date.freq = 52; + case 'M' + date.freq = 12; + case 'Q' + date.freq = 4; + otherwise + error(['dynDate:: Can''t instantiate the class! The second argument ' inputname(b) ' must be an integer equal to 1, 4, 12 or 52, or a character equal to ''Y'', ''A'', ''W'', ''M'' or ''Q''!']) end else - error(['dynDate:: Can''t instantiate the class! The second argument ' inputname(b) ' must be equal to 1, 4, 12 or 52.']) + error(['dynDate:: Can''t instantiate the class! The second argument ' inputname(b) ' must be an integer equal to 1, 4, 12 or 52, or a character equal to ''Y'', ''A'', ''W'', ''M'' or ''Q''!']) + end + if ~isnumeric(a) + error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be numeric!']) + end + if ~all(isint(a)) + error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be a scalar or a 1*2 vector of integers!']) + end + if ~isequal(size(a),[1,2]) + if date.freq>1 + error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be a 1*2 vector of integers.']) + end + else + if isequal(date.freq,1) && isequal(a(2),1) + error(['dynDate:: Can''t instantiate the class! The second element of the first input argument ' inputname(a) ' must be equal to one (because freq==1)!']) + end + end + if a(2)<=0 || a(2)>date.freq + error(['dynDate:: Can''t instantiate the class! The second element of the first argument ' inputname(a) ' must be a positive integer be <=' int2str(b) '!' ]) + end + if length(a)==1 + date.time = [a, 1]; + else + date.time = a; end otherwise error('dynDate:: Can''t instantiate the class, wrong calling sequence!')