Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Matlab中的多行字符串文字?_String_Matlab_Multiline_Literals - Fatal编程技术网

String Matlab中的多行字符串文字?

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

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

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

编辑:我特别关注代码中文字的可读性和易修改性(想象它包含不同级别的缩进块)——制作多行字符串很容易,但我正在寻找最方便的sytax

到目前为止我有

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\'替换,您可以使用它将文本特别粘贴到以编程方式编辑,执行必要的替换。sUse
sprintf
以获取格式化的多行字符串。
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'
    });