我正在使用[filepath, name, ext]=fileparts(thisFile);
将文件导入到函数中。然后,我想使用一系列的if语句,这些语句将根据文件的类型在文件上运行;但是,come文件将具有相同的初始设置,因此我希望能够将它们全部包含在if语句中。我当前的实现:elseif (ext == '.s3p')
。如果我输入类似以下内容:elseif (ext == '.s2p' || '.s3p')
编译器发出抱怨,
||的运算符和&&运算符必须可转换为逻辑标量值。
您明白我的逻辑。我可以做些什么来做这项工作吗?
提前谢谢!
答案 0 :(得分:2)
您可能想要strcmp
,而不是==
。使用a==b
,您可以进行逐个元素比较。这样就得到一个逻辑向量。如果a
和b
的字符数不同,则会出现错误。
==
的输出是逐元素比较的逻辑 vector ,这是导致m-lint消息的原因。 ||
和&&
需要标量参数。
最后,在(ext == '.s2p' || '.s3p')
中,您可能是指(ext == '.s2p' || ext == '.s3p')
。
结合以上所有内容:
elseif strcmp(ext,'.s2p') || strcmp(ext,'.s3p')
为清楚起见,您可能更喜欢将ismember
函数与扩展的单元格数组结合使用以进行比较:
elseif ismember(ext, {'.s2p' ,'.s3p'})
或克里斯·伦戈(Cris Luengo)指出,
elseif any(strcmp(ext, {'.s2p', '.s3p'}))
更好的是,您可能更喜欢使用switch
而不是一系列的elseif
语句,它对每个strcmp
隐式应用ismember
/ case
:
switch ext
case {'sp2', 'sp3'}
% Do stuff
case {'aaa', 'bbb'}
% Do stuff
otherwise
error('Unrecognized extension')
end