【问题标题】:issue with sscanfsscanf 的问题
【发布时间】:2014-02-26 00:28:10
【问题描述】:

我在从 sscanf 获取我想要的东西时遇到问题;

例如从文件名中获取 varname、年、月、日;

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。

【问题讨论】:

  • 您得到想要的答案了吗?

标签: matlab scanf


【解决方案1】:

前三个值是'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'

【讨论】:

  • 太棒了!!非常感谢!这对我来说更有意义了!
猜你喜欢
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多