20

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

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

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

到目前为止我有

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

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

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

4

3 回答 3

13

我会去:

multiline = sprintf([ ... 
'Line 1\n'... 
'Line 2\n'... 
]);
于 2013-01-09T11:34:14.450 回答
6

Matlab 很奇怪,因为字符串中的转义处理是函数printf族的函数,而不是字符串文字语法。并且没有多行文字。那好吧。

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

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

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

其次,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{:});

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

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

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

于 2013-01-10T09:22:15.327 回答
2

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

multiline = join([
"Line 1"
"Line 2"
], newline)

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

于 2021-07-02T17:47:02.353 回答