Запрашиваемая да или нет запрос в MATLAB - PullRequest
1 голос
/ 22 февраля 2012

Я написал скрипт в MATLAB, где я извлекаю строки и столбцы из таблицы на основе предложения WHERE. Пока мне удается получить данные из таблицы базы данных.

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

Это мой код, который у меня есть, и скрипт называется searchpdb.

pdbSearch = input('Enter your PDB Code: ', 's')
curs = fetch(exec(conn, ['SELECT * FROM cath_2_wo_dup WHERE pdbcode = ' '''' pdbSearch '''']));
fprintf('Results Successful! \n');
results = curs.Data % prints the data out

% ----------------------
% User option to search again
% -----------------------

goAgain = input('Would you like to search for another pdb?', 's');
% if (goAgain = 'Yes')
if strcmp(goAgain, 'Yes')
    searchpdb(); %runs this script again.
elseif strcmp(goAgain, 'No')
    fprintf('\nBye!\n');

end

Я пытался использовать 'questdlg', но он не показывает результаты данных в таблице после того, как я дал пользователю возможность снова запускать.

Я делаю это неправильно, или есть другой эффективный способ сделать это? Должен ли вариант запуска сценария снова быть в другом сценарии?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Хорошо, это будет работать, но я бы рекомендовал использовать предложение while вместо рекурсивного вызова сценария:

goAgain = true;
while goAgain
    pdbSearch = input('Enter your PDB Code: ', 's');
    curs = fetch(exec(conn, ['SELECT * FROM cath_2_wo_dup WHERE pdbcode = ' '''' pdbSearch '''']));
    fprintf('Results Successful! \n');
    results = curs.Data % prints the data out

    % ----------------------
    % User option to search again
    % -----------------------

    res = input('Would you like to search for another pdb?', 's');
    goAgain = isequal(upper(res),'YES');
end

Это только становится понятнее читателю вашего кода.Просто взглянув на первые строки этого нового кода, можно догадаться, что:

  1. Есть цикл - что-то происходит несколько раз.
  2. Существует условие остановки, называемоеgoAgain.
1 голос
/ 22 февраля 2012

В чем проблема, точно?Следующий тестовый скрипт (называемый scriptrecurse.m) работает должным образом (обратите внимание, что вам не нужны скобки () для вызова скрипта).

X = randn(3);
disp('X = ')
disp(X)

x = input('Go again? ','s');

if strcmpi(x,'y')
    scriptrecurse
else
    fprintf('Bye!\n')
end

Например:

>> scriptrecurse
X = 
    1.1808    0.4716   -1.4529
    0.1729    2.0474   -0.6343
    0.1747   -0.6437   -1.1136

Go again? y
X = 
   -0.8910   -0.2479    0.0851
    1.7106    2.0659    0.6639
   -0.5174   -0.4350    0.0301

Go again? n
Bye!
...