【问题标题】:Asking a Yes or No query in MATLAB在 MATLAB 中询问是或否查询
【发布时间】:2012-02-21 20:15:53
【问题描述】:

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

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

【问题讨论】:

    标签: matlab if-statement strcmp printf


    【解决方案1】:

    好吧,它会起作用,但我建议使用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 的停止条件。

    【讨论】:

    • 感谢您提供有关使用 while 循环的提示。但是,我想允许用户输入'Yes' or 'No' 以再次搜索。到目前为止,它只是再次循环。有没有办法我可以包含要调用的字母,这样如果用户输入'Yes',它允许他们再次搜索,如果是'No',它会取消脚本的运行。
    • @jeiman90,看起来它正在工作。 (至少在我的电脑上)。你能解释一下出了什么问题吗?
    • 当我最初输入我的第一个 pdbcode 代码以在数据库中搜索时,它会返回表(这很好),但是当它询问我是否要再次运行它并输入时在“否”中,它仍然运行 while 循环,要求我输入另一个 pdb 代码(当我不需要时)。
    • 另外,另一个查询,我如何允许首先检索到的数据显示在工作区中,然后再为用户提供再次搜索的选项?
    • 它有效。谢谢你。回到我问的另一个问题。在向用户提供再次搜索的选项之前,如何允许首先检索到的数据显示在工作区中?尽管它在命令窗口中显示了结果,但我想在再次搜索之前查看我查询过的结果。在进行第一次查询后,它不会将变量放入工作区。你明白我的意思吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2012-09-29
      相关资源
      最近更新 更多