Сравнение нескольких типов файлов в операторе if - PullRequest
0 голосов
/ 16 октября 2018

Я импортирую файл в функцию, используя [filepath, name, ext]=fileparts(thisFile);.Затем я хотел бы использовать серию операторов if, которые будут работать с файлом в зависимости от его типа;однако исходные файлы будут иметь одинаковую начальную настройку, и поэтому я хотел бы иметь возможность включить их все в оператор if.Моя текущая реализация: elseif (ext == '.s3p').Если я вставлю что-то вроде: elseif (ext == '.s2p' || '.s3p') скулит компилятор,

Операнды к ||и операторы && должны быть преобразованы в логические скалярные значения.

Вы видите мою логику.Могу ли я что-нибудь сделать для этой работы?

Заранее спасибо!

1 Ответ

0 голосов
/ 16 октября 2018
  1. Вы, вероятно, хотите strcmp, а не ==a==b вы получаете поэлементное сравнение.Таким образом, вы получите логический вектор как результат;и если a и b имеют различное количество символов, вы получите ошибку.

  2. Тот факт, что вывод == является логическим вектором поэлементных сравнений - то, что вызывает сообщение m-lint.|| и && требуют скалярных аргументов.

  3. Наконец, в (ext == '.s2p' || '.s3p') вы, вероятно, имели в виду (ext == '.s2p' || ext == '.s3p').

Объединение всего вышеперечисленного:

elseif strcmp(ext,'.s2p') || strcmp(ext,'.s3p')

Для ясности и читаемости вы можете использовать функцию ismember с массивом ячеек расширений для сравнения с:

elseif ismember(ext, {'.s2p' ,'.s3p'})

или, как указал Крис Луенго,

elseif any(strcmp(ext, {'.s2p', '.s3p'}))

Еще лучше, вместо серии elseif утверждений, которые вы можете использовать switch, что неявно применяется strcmp / ismember для каждого case:

switch ext
    case {'sp2', 'sp3'}
        % Do stuff
    case {'aaa', 'bbb'}
        % Do stuff
    otherwise
        error('Unrecognized extension')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...