我遇到了从sscanf
;
e.g。从文件名中获取varname,year,month,day;
filename = 'stn2014021412598cjgafe.cnv'
format = '%3s%4d%2d%2d%5d%*10s';
test = sscanf(filename,format);
我得到了结果:
test =
115
116
110
2014
2
14
12598
但我想要的是
varname = 'stn'
year = 2014
month = 2
day = 14
然后记录或不记录5位数
num = 12598
并跳过其他所有内容。
但是,我不明白为什么我得到这3个数字115,116,110。
答案 0 :(得分:3)
前三个值是's'
,'t'
和'n'
的字符代码。 sscanf
documentation解释了为什么它以format
说明符的方式出现。
混合字符和数字转换规范会导致 结果矩阵为数字,读取的任何字符都显示出来 作为它们的数值,每个MATLAB矩阵元素一个字符。
换句话说:
>> char(test(1:3))'
ans =
stn
更简单的解决方案可能是textscan
,因为它将组件存储在单元格数组中,允许使用不同的类型:
>> C = textscan(filename,format)
C =
{1x1 cell} [2014] [2] [14] [12598]
>> C{1}
ans =
'stn'