sscanf的问题

时间:2014-02-26 00:28:11

标签: matlab scanf

我遇到了从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。

1 个答案:

答案 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'