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 に答える