1

我在 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”,但在我为用户提供再次运行的选项后,它没有显示表中数据的结果。

我这样做是错误的,还是有另一种有效的方法?再次运行脚本的选项应该在另一个脚本中吗?

4

2 回答 2

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
于 2012-02-21T21:04:09.673 回答
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!
于 2012-02-21T20:27:17.043 回答