Предоставление входных параметров из командной строки Windows в функцию Matlab, скомпилированную как .exe

Привет, я использовал mcc для преобразования функции Matlab в автономный .exe. когда я запускаю файл .exe в командной строке Windows, он возвращает следующую ошибку:

  1. слишком много входных аргументов // когда я даю два входных параметра, которые должны быть
  2. первый аргумент должен иметь столько столбцов, сколько входных переменных, столько строк, сколько независимых наборов входных значений // когда я даю один вход.

Я использовал команду для автономной сборки: «mcc -mv myfile.m -a datfile.fis» ----------- процесс сборки в порядке. Но когда я запускаю эту команду «myfile.exe 2.0 20.2» в приглашении Windows, она выдает вышеуказанные ошибки. Моя программа принимает два входа и дает один выход. Я запустил учебник Matlab magicsquare.m для преобразования magicsquare.exe на том же компьютере и отлично работает. Кто-нибудь может помочь? обратите внимание, что перед преобразованием программа отлично работает в Matlab. В MATLAB мне вводят следующие данные.

мой файл ([2.0 20.2])


person user1805525    schedule 21.01.2013    source источник
comment
Если myfile([2.0 20.2]) работает правильно внутри Matlab, то ваша функция явно принимает только один ввод, поскольку [2.0 20.2] является одной переменной (в частности, вектором 2*1). Кроме того, я считаю, что любой ввод из командной строки Windows интерпретируется скомпилированным Matlab как строка, поэтому вам нужно будет использовать строковые вводы для своей функции, а затем преобразовать их, используя str2num в верхней части вашей функции.   -  person Colin T Bowers    schedule 21.01.2013
comment
Кроме того, будьте осторожны с командной строкой Windows, разделяющей ваш аргумент на любой символ пробела.   -  person s.bandara    schedule 21.01.2013


Ответы (1)


Когда вы запускаете исполняемый файл из командной строки Windows/DOS, аргументы передаются в исполняемый файл в виде строк — как если бы вы в MATLAB назвали свою функцию как myfile "2.0" "20.2".

Каждый из этих входных данных представляет собой массив символов (например, содержащий значения ASCII для «2», «.» и «0»), поэтому ваша функция, вероятно, ошибается, поскольку входных данных слишком много.

Попробуйте переписать свою функцию так, чтобы она преобразовывала входные данные в числа, используя str2num или str2double. В качестве альтернативы сохраните свои входные данные в файле и создайте свою функцию, чтобы принимать имя файла в качестве входных данных.

Если вы хотите, чтобы он вел себя по-разному при работе в MATLAB и при запуске в развернутом виде, используйте встроенную функцию isdeployed в предложении if для переключения поведения.

person Sam Roberts    schedule 21.01.2013