我在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',但在我给用户再次运行选项后,它没有显示表中数据的结果。
我这样做是错误的,还是有另一种有效的方法呢?是否应该再次运行脚本的选项在另一个脚本中?
答案 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
对于您的代码的读者来说,这一点变得更加清晰。只需看一下这段新代码的第一行,就可以猜到:
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!