Matlab: как опубликовать скрипт, требующий ввода пользователя - PullRequest
4 голосов
/ 09 декабря 2011

Я хотел бы опубликовать код Matlab, который требует некоторого ввода от пользователя (одна строка). Код работает нормально, но когда я пытаюсь опубликовать его, я получаю

Error using input
Cannot call INPUT from EVALC.
Error in test (line 185)
userinput = input('Enter the code here\n', 's');

Есть ли обходной путь?

Ответы [ 4 ]

4 голосов
/ 09 декабря 2011

Если щелкнуть небольшое раскрывающееся меню рядом с кнопкой публикации, вы увидите элемент с именем Изменить настройки публикации . Если вы выберете это (хотя файл, который вы хотите опубликовать, открыт в редакторе), вы увидите, что у вас есть выражение MATLAB, которое вы можете редактировать. Это код MATLAB, который выполняется при публикации скрипта, и по умолчанию это просто имя вашего скрипта.

Допустим, ваш скрипт называется myscript, поэтому по умолчанию публикуемое выражение просто

myscript

Вы можете редактировать выражение так:

userinput = 'example';
myscript

Тогда это будет выполнено, когда вы нажмете кнопку публикации.

В вашем скрипте измените строку

userinput = input('Enter the code here\n', 's');

до

if ~exist('userinput', 'var')
    userinput = input('Enter the code here\n', 's');
end

Теперь ваш скрипт будет работать как обычно (при условии, что в рабочей области нет переменной 'userinput'), и ваш скрипт будет успешно опубликован.

Надеюсь, это поможет!

1 голос
/ 13 апреля 2013

Если вы хотите опубликовать файл Matlab (xyz.m) без выполнения кода, используйте следующее.

% To stop executing the script before publish

opts.evalCode = false

% Similarly here are some more options 

% If you want to publish only comments and not code, then 

opts.showCode = false

% Publish doc format, html by default

opts.format = 'html'

% Catch error before publishing

opts.catchError = true

% Publish doc output path

%opts.outputDir = <path>

% Finally publish 

publish('xyz.m',opts)
0 голосов
/ 21 октября 2015

Вместо использования команды ввода используйте inputdlg. Так вы бы;

userinput = inputdlg('Enter the code here:');

Это создает диалоговое окно, генерирующее введенные значения в виде строки, и позволяет вам выполнить и опубликовать код

0 голосов
/ 11 февраля 2014

Нет прямого способа использовать input () в коде, который вы хотите выполнить и опубликовать результаты. Возможны обходные пути. Я бы просто разделил код на две (или более) части. Первая часть будет использовать input (), а затем publish (). Другая часть будет фактическим кодом, в то время как первая часть формирует оболочку для второй. Publish () в первой части будет вызывать вторую (и / или другую) часть (и). Это дает гибкость в управлении тем, что должно отображаться в сгенерированном выводе, чтобы правильно указать, что input () используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...