Автоматизация ввода в Matlab - PullRequest
2 голосов
/ 11 августа 2011

Этим летом я помогаю с оценкой курса Matlab, и одно из заданий состоит в создании простого пользовательского интерфейса для построения графиков функций и изменения их внешнего вида. Весь ввод осуществляется в командной строке, поэтому меню выглядят примерно так:

=====================
1. New function
2. Change line-width
3. Change line-style
=====================

Я всегда начинаю тестирование одним и тем же способом, когда проверяю базовую функциональность:

1, 2, sin (x) (создать график sin (x) в окне 2)

1, 3, exp (x) (создать график exp (x) в окне 3)

2, 3, 2 (изменить ширину линии участка 3 на 2)

3, 2, - (изменить стиль линии сюжета № 2 на пунктирную)

и т.д.

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

По сути, я хочу, чтобы Matlab прочитал нажатия клавиш "1 [enter] 2 [enter] sin (x) [enter] ..." в командной строке при запуске другого сценария Matlab.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Одна из возможностей - создать приватную версию функции input, которая затеняет встроенную функцию. Каждый раз, когда он вызывается, он возвращает значение из заранее определенного набора значений. Вы можете поддерживать состояние, используя global / persistent переменную (счетчик, чтобы отслеживать, сколько раз была вызвана функция).

По сути, вы будете создавать заглушку метода до макет поведение реальной функции.


Вот пример, чтобы лучше объяснить мою идею:

/ somepath / частный / input.m

function ret = input(prompt, varargin)
    %# counter
    persistent count
    if isempty(count), count = 1; end

    %# hard-coded values to return
    values = {
        1 2 'sin(x)' ...
        1 3 'exp(x)' ...
        2 3 2 ...
        3 2 '--' ...
    };

    %# display the prompt message
    disp([prompt '[SIMULATED INPUT #' num2str(count) ']'])

    %# return value
    ret = values{count};

    %# increment counter
    count = count + 1;
    if count>12
        count = 1;
    end
end

/ somepath / hw1.m

function hw1
    %# image this is a sample homework file, 
    %# using the standard INPUT function to ask for input from the user
    %# and do something useful with it :)

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    num3 = input('enter a third number: ');
    fprintf('You entered: %d %d %d\n',num1,num2,num3);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);
end

Это вывод, который вы получаете:

enter a number: [SIMULATED INPUT #1]
enter a second number: [SIMULATED INPUT #2]
enter a string: [SIMULATED INPUT #3]
You entered: 1 2 sin(x)
enter a number: [SIMULATED INPUT #4]
enter a second number: [SIMULATED INPUT #5]
enter a string: [SIMULATED INPUT #6]
You entered: 1 3 exp(x)
enter a number: [SIMULATED INPUT #7]
enter a second number: [SIMULATED INPUT #8]
enter a third number: [SIMULATED INPUT #9]
You entered: 2 3 2
enter a number: [SIMULATED INPUT #10]
enter a second number: [SIMULATED INPUT #11]
enter a string: [SIMULATED INPUT #12]
You entered: 3 2 --
0 голосов
/ 11 августа 2011

Посмотрите на AutoIt и посмотрите, подходит ли он вашим потребностям:

http://www.autoitscript.com/site/autoit/

ура

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