为什么strcat()不在Matlab中返回一个字符串?

时间:2013-05-02 01:17:11

标签: matlab

我正在尝试访问for循环中的多个文件,如下所示:

age = xlsread(strcat('Pipeline_BO_2013 _',names(2),'_ CDBU.xlsx'),'数据','H:I')

它返回一个错误,文件名必须是字符串。所以我做了以下测试:

  
    

filename = strcat('Pipeline_BO_2013 _',names(2),'_ CDBU.xlsx')

  

filename =

'Pipeline_BO_2013_0107_CDBU.xlsx'
  
    

ISSTR(文件名)

  

ans =

 0

这太奇怪了。任何人都可以帮助我吗?非常感谢你。

1 个答案:

答案 0 :(得分:3)

看起来namescellstr而不是char数组。如果是这样,使用括号如names(2)索引到它将返回一个1长的cellstr数组,而不是char数组。当使用任何参数作为cellstr调用strcat时,它返回一个cellstr。然后xlsread错误,因为它需要char,而不是cellstr

不是仅在isstr上调用ischarfilename,而是class(filename),它会告诉您它是什么。

另一个线索是filename显示引号。这就是cellstrs的显示方式。如果它是一个char数组,它将显示没有引号。

如果是这种情况,并且names是一个celltr,则需要使用{}索引来“弹出”单元格内容。

filename = strcat('Pipeline_BO_2013_',names{2},'_CDBU.xlsx')

或者您可以使用sprintf,您可能会发现它更具可读性,并且在您开始插入不同类型的多个参数后会更灵活。

filename = sprintf('Pipeline_BO_2013_%s_CDBU.xlsx', names{2})
% An example of more flexibility:
year = 2013;
filename = sprintf('Pipeline_BO_%04d_%s_CDBU.xlsx', year, names{2})