比较if语句中的多种文件类型

时间:2018-10-15 23:00:22

标签: matlab

我正在使用[filepath, name, ext]=fileparts(thisFile);将文件导入到函数中。然后,我想使用一系列的if语句,这些语句将根据文件的类型在文件上运行;但是,come文件将具有相同的初始设置,因此我希望能够将它们全部包含在if语句中。我当前的实现:elseif (ext == '.s3p')。如果我输入类似以下内容:elseif (ext == '.s2p' || '.s3p')编译器发出抱怨,

  

||的运算符和&&运算符必须可转换为逻辑标量值。

您明白我的逻辑。我可以做些什么来做这项工作吗?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

  1. 您可能想要strcmp,而不是==。使用a==b,您可以进行逐个元素比较。这样就得到一个逻辑向量。如果ab的字符数不同,则会出现错误。

  2. ==的输出是逐元素比较的逻辑 vector ,这是导致m-lint消息的原因。 ||&&需要标量参数。

  3. 最后,在(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