在MATLAB中询问是或否查询

时间:2012-02-21 20:15:53

标签: matlab if-statement strcmp printf

我在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 个答案:

答案 0 :(得分:3)

嗯,它会起作用,但我建议使用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 :(得分:1)

究竟是什么问题?以下测试脚本(称为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!