Matlab中实现季度日期字符串迭代并正确存储的问题
解决Matlab生成季度日期字符串的问题
问题原因
你用fprintf赋值给enddate得到的不是目标字符串,是因为**fprintf的返回值是输出的字符总数**,不是格式化后的字符串。比如输出'1970q1'时,字符数是7(包括前后的单引号),所以enddate会被赋值为7这类数字,而非你想要的日期字符串。
正确实现方法
方法1:用sprintf替代fprintf生成字符串
sprintf的作用是直接返回格式化后的字符串,适合用来生成并存储目标内容。如果需要把所有季度日期存起来,可以用字符串数组:
% 初始化空字符串数组存储结果 enddate = strings(0); for yy=1970:1971 for jj=1:4 % 生成格式为'1970q1'的字符串(如果不需要字符串里的单引号,去掉sprintf里的两个单引号) current_date = sprintf('''%dq%d''', yy, jj); enddate = [enddate, current_date]; end end
如果不需要字符串包含前后的单引号,简化为:
current_date = sprintf('%dq%d', yy, jj);
方法2:无循环的高效写法
当年份范围较大时,用矩阵操作代替循环更高效:
% 生成重复的年份和季度序列 years = repmat(1970:1971, 4, 1); quarters = repmat(1:4, 1, length(1970:1971)); % 拼接成目标格式的字符串数组 enddate = strcat(string(years(:)), 'q', string(quarters(:)));
运行后enddate会是包含所有季度日期的字符串数组:"1970q1" "1970q2" "1970q3" "1970q4" "1971q1" "1971q2" "1971q3" "1971q4"
内容的提问来源于stack exchange,提问作者Suttungr
相关产品推荐
相关产品推荐

