Matlab中的多行字符串文字?

rob*_*nce 18 string matlab multiline literals

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

我找到了逐字包,但它只能在m文件或函数中工作,而不能在编辑器单元中交互.

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

到目前为止我有

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

这给出了size(t)= 1 8,但显然有点混乱.

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

edg*_*eis 13

我会去:

multiline = sprintf([ ... 
'Line 1\n'... 
'Line 2\n'... 
]);
Run Code Online (Sandbox Code Playgroud)


And*_*nke 6

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

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

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

function out = LF()
out = char(10); % # sprintf('\n');
Run Code Online (Sandbox Code Playgroud)

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

function out = join(glue, strs)
strs = strs(:)';
strs(2,:) = {glue};
strs = strs(:)';
strs(end) = [];
out = cat(2, strs{:});
Run Code Online (Sandbox Code Playgroud)

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

str = join(LF, {
    'abc'
    'defghi'
    'jklm'
    });
Run Code Online (Sandbox Code Playgroud)

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

  • 我正在使用Matlab r2007b和行cat(1,strs {:}); 没有按预期处理,我得到"CAT参数维度不一致.".这可能是由于我的旧Matlab版本? (2认同)