【问题标题】:why strcat() doesn't return a string in Matlab?为什么 strcat() 在 Matlab 中不返回字符串?
【发布时间】:2013-05-02 01:17:10
【问题描述】:

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

age = xlsread(strcat('Pipeline_BO_2013_',names(2),'_CDBU.xlsx'), '数据', 'H:I')

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

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

文件名 =

'Pipeline_BO_2013_0107_CDBU.xlsx'

isstr(文件名)

ans =

 0

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

【问题讨论】:

  • 试试ischar,让我知道你得到了什么结果。根据 MA​​TLAB 文档,isstr 将在未来版本中删除。顺便说一句,如果我复制并粘贴您的输入,我会得到 ans=1isstr(filename)
  • 试试ischar(names(2))。我打赌这将返回0。如果是,请尝试使用以下内容创建文件名:filename = ['Pipeline_BO_2013_', num2str(names(2)), '_CDBU.xlsx']。让我知道它是否有效,我会将其转化为答案。
  • Matlab isstr 在功能上与ischar 相同;只是改名而已。

标签: matlab


【解决方案1】:

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

不要只是在filename 上调用isstrischar,而是调用class(filename),它会告诉你它是什么。

另一个线索是filename 用引号显示。这就是 cellstr 的显示方式。如果是 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})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2020-07-06
    • 2018-09-17
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多