在Matlab中索引变量字符串

时间:2014-03-20 14:50:18

标签: matlab indexing char

我有可变的输入名称,我想分配给图表的标题。例如'UKtreasury_returns','China_logReturns','US_ret'....

我想简单地提取直到每个示例中的下划线。它们是函数参数,所以我尝试过:

header = inputname(1);
subject = header(1:'_'-1);
finalTitle = [subject, ' - first three PCs'];

'-1'是因为我不想在输出中包含下划线。

这不起作用,我得到了错误信息:'索引超出矩阵维度'。

如何动态引用下划线?有关如何将解决方案扩展到我将来可能遇到的其他索引问题的任何提示吗?

3 个答案:

答案 0 :(得分:1)

您无法在MATLAB中使用组成字符索引字符串。当你这样做时:

header(1 : '_' - 1);

MATLAB自动转换char' _'转换为整数索引,类似于C中发生的事情。由于此整数的值超出了字符串的长度,因此会出现上述错误。

要实现您的目标,您可以:

strs = strsplit(header, '_');
subject = strs{1};

答案 1 :(得分:1)

不是拆分字符串,而是可以找到' _'在你的字符串中,然后只采用一个子字符串:

k = strfind(header, '_');
subject = header(1:k(1)-1);

这比使用strsplit要快得多 此代码假定至少出现一次' _'在你的字符串中。

答案 2 :(得分:0)

编辑:@scai我没有看到上面给出的答案。下面的连接问题是由于我使用普通的括号()而不是大括号{}。

我已经设法使用以下代码自己完成:

header = inputname(1);
strings = strsplit(header, '_');
subject = strings{1}; 
finalTitle = [subject, ' - first three PCs']';
title(finalTitle);

现在的问题是,标题显示为柱状矢量。我尝试在显示的位置和第四行代码的末尾以及finalTitle的最后一行中使用转置。

有什么建议吗?是否可以转置文本连接?

(我调整了数字的大小,它与那里的限制无关)