STRREAD()读取字符串

时间:2015-08-22 11:24:40

标签: arrays matlab date

我有一个从csv文件中读取的日期单元格数组。格式如下:

date =

' 2008.12.01'

' 2008.12.02'

' 2008.12.03'

' 2008.12.04'

' 2008.12.05' ......

我想:

  1. 将单元格数组转换为字符串数组
  2. 使用strread()来阅读" yyyy"," mm"和" dd"值为3双数组[年,mm,dd],
  3. 使用datenummx()将[year,mm,dd]转换为日期seriel num。
  4. 使用后

      
        

    date = char(date);

      

    日期数组变成这样:

    date =

    2008.12.01

    2008.12.02

    2008.12.03

    2008.12.04

    2008.12.05 ......

    我认为结果是我想要的......

    但是在我使用strread()之后,它给了我奇怪的结果。

      
        

    [年,月,日] = strread(日期,&#39;%d%d%d&#39;&#39;分隔符&#39;&#39;&#39); < / p>   

    year =

    -1
    
     0
    
     0
    
     0
    
     0
    

    ......

    但如果我使用下面的代码,strread()可以给我正确答案:

      
        

    s = sprintf(&#39; 2008.12.01&#39;)

      

    s =

    2008.12.01

      
        

    [年,月,日] = strread(S,&#39;%d%d%d&#39;&#39;分隔符&#39;&#39;&#39)

      

    year =

        2008
    

    month =

    12
    

    day =

     1
    

    我在matlab中检查了&#34; date&#34;和&#34; s&#34;是一个char数组。(通过使用函数&#39; ischar&#39;并简单地显示两者)...

    但是为什么strread()会给出不同的结果?

    任何人都可以回答吗?

    顺便说一句,我使用MatLab v6.5。(出于我自己的原因,所以请不要通过询问&#34来评论;为什么不使用更高版本&#34;).... / p>

1 个答案:

答案 0 :(得分:0)

你的问题就在这一行:

date = char(date);

它不会创建字符串数组,matlab中没有字符串数组。它创建了一个字符数组。正如您已经注意到的那样,如果输入单个日期,则strread - 行是正常的,因此请分别从原始单元格数组输入每个日期:

for idx=1:numel(date)
    [year(idx),month(idx),day(idx)]=strread(date{idx},'%d%d%d','delimiter','.');
end

年,月,日的预分配可提高性能。