2013-05-02 115 views
1

我试图访问多个文件,在for循环中,像这样:为什么strcat()在Matlab中不返回字符串?

年龄= xlsread(strcat的( 'Pipeline_BO_2013 _',名称(2), '_ CDBU.xlsx'), '数据',“^ h :我)

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

名= strcat的( 'Pipeline_BO_2013 _',名称(2), '_ CDBU.xlsx')

名=

'Pipeline_BO_2013_0107_CDBU.xlsx' 

ISSTR(文件名)

ANS =

0 

这是如此怪异。有人能帮我吗?非常感谢。

+0

尝试'ischar',让我知道你会得到什么结果。根据MATLAB文档'isstr'将在未来版本中被删除。顺便说一句,如果我复制并粘贴你的输入,我会为'isstr(filename)'得到'ans = 1'。 – Justin 2013-05-02 01:25:30

+0

尝试'ischar(names(2))'。我打赌会返回'0'。如果是,请尝试使用以下命令创建文件名:'filename = ['Pipeline_BO_2013_',num2str(names(2)),'_CDBU.xlsx']'。让我知道它是否有效,我会把它变成一个答案。 – 2013-05-02 02:08:07

+0

Matlab'isstr'在功能上等同于'ischar';这只是一个名称的变化。 – 2013-05-02 03:19:27

回答

3

看起来像namescellstr而不是char阵列。如果是这样,在索引它用括号像names(2)将返回1长cellstr阵列,而不是一个字符数组。当strcat被调用它的任何参数为cellstr,它返回一个cellstr。然后xlsread错误,因为它想要一个char,而不是一个cellstr

而不是仅仅调用isstrischarfilename,做class(filename)它会告诉你它是什么。

另一条线索是filename显示带有引号。这就是细胞如何显示。如果它是一个char数组,它将不显示引号。

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

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}) 
+0

谢谢安德鲁!这正是原因。 – user2341320 2013-11-13 01:50:31

相关问题