Matlab中的多行字符串文字?

时间:2013-01-09 11:09:14

标签: string matlab multiline literals

Matlab中是否存在多行字符串文字语法,或者是否需要连接多行?

我找到了verbatim包,但它只适用于m文件或函数,而不能在编辑器单元中交互使用。

编辑:特别是在可读性和易于修改代码中的文字之后(想象它包含不同级别的缩进块) - 很容易制作多行字符串,但我正在寻找最方便的sytax来做到这一点。

到目前为止我已经

t = {...
'abc'...
'def'};
t = cellfun(@(x) [x sprintf('\n')],t,'Unif',false);
t = horzcat(t{:});

给出尺寸(t)= 1 8,但显然有点混乱。

编辑2:基本上verbatim做我想要的,除了它在编辑器单元格中不起作用,但也许我最好的选择就是更新它。我认为应该可以从java界面到编辑器获取当前打开的文件和光标位置。问题是如果在同一个单元格中有多个逐字调用,你将如何区分它们。

3 个答案:

答案 0 :(得分:13)

我会去:

multiline = sprintf([ ... 
'Line 1\n'... 
'Line 2\n'... 
]);

答案 1 :(得分:6)

Matlab是一个古怪的例子,字符串中的转义处理是printf函数族的函数,而不是字符串文字语法。而且没有多行文字。哦,好吧。

我最终做了两件事。首先,使CR()LF()函数分别返回已处理的\ r和\ n,这样您就可以在代码中将它们用作伪文字。我更喜欢这样做而不是通过sprintf()发送整个字符串,因为在那里你可能还有其他反斜杠你不想作为转义序列处理(例如,如果你的一些字符串来自函数参数或从其他地方读取输入)。

function out = CR()
out = char(13); % # sprintf('\r')

function out = LF()
out = char(10); % # sprintf('\n');

其次,在您的示例中创建一个像Perl的join或cellfun / horzcat代码一样的join(glue, strs)函数,但没有最终的尾随分隔符。

function out = join(glue, strs)
strs = strs(:)';
strs(2,:) = {glue};
strs = strs(:)';
strs(end) = [];
out = cat(2, strs{:});

然后像你一样使用它与单元格文字。

str = join(LF, {
    'abc'
    'defghi'
    'jklm'
    });

你不需要像这样的单元格文字中的“...”省略号;省略它们会做一个垂直向量构造,如果行具有不同长度的char字符串就好了,因为它们都被卡在单元格内。仅此一项就可以为您节省一些打字费用。

答案 2 :(得分:1)

有点旧的线程,但我明白了

K

我认为如果让事情变得很容易,但显然这取决于人们正在寻找什么:)