String Matlab中的多行字符串文字?
Matlab中是否有多行字符串文字语法,或者是否有必要连接多行 我找到了这个包,但它只能在m文件或函数中工作,不能在编辑器单元格中交互 编辑:我特别关注代码中文字的可读性和易修改性(想象它包含不同级别的缩进块)——制作多行字符串很容易,但我正在寻找最方便的sytax 到目前为止我有String Matlab中的多行字符串文字?,string,matlab,multiline,literals,String,Matlab,Multiline,Literals,Matlab中是否有多行字符串文字语法,或者是否有必要连接多行 我找到了这个包,但它只能在m文件或函数中工作,不能在编辑器单元格中交互 编辑:我特别关注代码中文字的可读性和易修改性(想象它包含不同级别的缩进块)——制作多行字符串很容易,但我正在寻找最方便的sytax 到目前为止我有 t = {... 'abc'... 'def'}; t = cellfun(@(x) [x sprintf('\n')],t,'Unif',false); t = horzcat(t{:}); 这使得大小(t)=1
t = {...
'abc'...
'def'};
t = cellfun(@(x) [x sprintf('\n')],t,'Unif',false);
t = horzcat(t{:});
这使得大小(t)=18,但显然有点乱
编辑2:基本上,verbatim
做我想做的事情,只是它在编辑器单元格中不起作用,但也许我最好的办法是更新它,使它起作用。我认为应该可以从java接口到编辑器获取当前打开的文件和光标位置。问题是,如果在同一个单元格中有多个逐字记录调用,您将如何区分它们。我选择:
multiline = sprintf([ ...
'Line 1\n'...
'Line 2\n'...
]);
Matlab很奇怪,因为字符串中的转义处理是
printf
函数族的函数,而不是字符串文字语法。并且没有多行文字。哦,好吧
我最后做了两件事。首先,使CR()
和LF()
函数分别返回已处理的\r和\n,以便在代码中将它们用作伪文本。我更喜欢这样做,而不是通过sprintf()发送整个字符串,因为其中可能有其他反斜杠,您不希望将其作为转义序列处理(例如,如果某些字符串来自函数参数或从其他地方读取的输入)
其次,创建一个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'
});
您不需要像这样的单元格文字中的“…”省略号;省略它们会产生一个垂直向量构造,如果行具有不同长度的字符字符串,这是很好的,因为它们每个都卡在一个单元格中。光是这一点就可以省下你的打字时间。我不确定我是否明白你的问题。您可以添加一些示例来阐明您的目标吗?Shai:我想在Python中输入一个多行字符串文字,如
“
:例如复制和粘贴一块文本(保持缩进)从另一个源到matlab字符串中。我猜它用单元格数组混乱来交换手动添加换行符,但基本上是相同的想法…复制和粘贴文本块都有点麻烦!获取一个编辑器,可以用正则表达式搜索/替换,然后用\\n\'…\n\'替换,您可以使用它将文本特别粘贴到以编程方式编辑,执行必要的替换。sUsesprintf
以获取格式化的多行字符串。fprintf
应用于直接打印到屏幕。@sequielo:编辑以反映我正在使用Matlab r2007b,并且cat(1,strs{:})行未按预期处理,我得到“CAT参数维度不一致。”。这可能是因为我的旧Matlab版本吗?对我来说,使用函数调用char(1,strs{:});似乎是可行的。@RobertG:你是对的–它应该是CAT(2,strs{:})
或horzcat(strs{:})
愚蠢的疏忽;抱歉。修复了调用char(1,strs{:})
可能会生成一个填充的二维字符数组,而不是一个带有嵌入换行符的长字符向量,这可能也很有用,但不是我使用的join()
(如果所有输入字符串的长度都与OP相同,则cat(1,…)
会正常工作,但输出格式会错误。)
str = join(LF, {
'abc'
'defghi'
'jklm'
});