2017-08-31 11 views
1

私はチェックする論理条件の束を持っています。満足していない各条件については、エラーメッセージが必要です。ここでは、より良い理解のために私のコードです:上記のコードで配列内の偽の値のインデックスを見つけ、エラーで表示します

v1 = isequal(c{1, 1}, 'some string'); 
v2 = isequal(c{1, 2}, 0); 
v3 = isequal(c{2, 1}, 'some string'); 
v4 = isequal(c{2, 2}, 0); 
v5 = isequal(c{3, 1}, 'some string'); 
v6 = isequal(c{3, 2}, 0); 

v = [v1, v2, v3, v4, v5, v6]; 

は、彼らがvにゼロ(偽)ですので、いくつかのテストは、falseを返します。

今、私はどのものがゼロであるかを取得し、エラーでそれらにフラグを立てたいと思います。たとえば、v3がfalseの場合、error('Check the v3 for solving')を示す出力が必要です。

条件が複数回も使用できない場合は、vから値を取得する必要があります。

+0

私はエラーメッセージに書き込むことができるように、その6つのうちどれが偽であるかが今必要です。私の問題は、どちらが偽であるかを見つける方法です。 –

+0

ごめんなさい。例えば 私は結果v = [1、0、0、1、0、1]を得ました。 v2、v3、v5が偽であり、エラーメッセージがエラー( 'check v2、v3、v5')であるという出力を得ることは可能ですか?それが可愛いなら、どうやって? –

答えて

2

あなたは自分のライン上のこれらの比較のすべてを行う必要はありません、あなたはあなたのvを取得するにはcellfun

c = {'test',  0 
    'some string', 1 
    'some string', 0}; 

V = cellfun(@isequal, c, {'some string', 0; 'some string', 0; 'some string', 0}) 

>> V = 3x2 logical 
    [0 1 
    1 0 
    1 1] 

を使用することができ、あなたはベクトル

v = V(:); % v = [0 1 1 1 0 1].'; 

にこれを行うことができます次に、エラーメッセージを作成することができます。もちろん

error(['Check: ' sprintf('v%d, ', find(~v)) 'did not match criteria']) 

% Output in red (and stops function) as it is an error 
>> Check: v1, v5, did not match criteria 

あなたがあったかvを作成する上で運ぶ、または宣言​​をスキップして、直接、エラーのfind文でV(:)代わりのvを使用することができます。

いずれにせよ、これは基本的に、sprintfを使用して、必要なエラーを作成するための1つのライナーです。


あなたの2つのチェックが本当に常に同じ2つの値(のような'some string'0)であれば、あなたがするたびにそれらを記述する必要はありませんどちらか

V = cellfun(@isequal, c, repmat({'some string', 0}, size(c,1), 1)) 

あなたはおそらくしたいですエラーを開始する前に少なくともfalseの値が1つあることを確認してください。anyを使用してください。

0

findをご覧ください。あなたはそれについてhereを読むことができます。

要するに、あなたは書くことができます:あなたに与えられた条件を満たすアイテムのインデックスを与えるだろう

idx = find(~v) 

を。 さらに、これは必要なエラー情報を印刷するために使用できます。関心のあるすべてのインデックスのための適切な情報を印刷し

disp(['problem with: ', num2str(idx)]) 

:あなたが使用することができ、メッセージを表示するには

+0

@Wolfie確かに 'find(〜v)'は正しい方法ですが、これは単なる例に過ぎません。それにもかかわらず、編集されました。提供されたリンクによると、findは論理的な値としても動作するはずです。 'Data Types:single |ダブル| int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 |論理| char' – Dusteh

関連する問題