2

IDL に簡単な elseif ステートメントを入れようとしていますが、かなり苦労しています。matlab コードは次のようになります。

a = 1
b = 0.5

diff = a-b
thres1 = 1
thres2 = -1

if diff < thres1 & diff > thres2  
  'case 1'
elseif diff > thres1 
  'case 2'
elseif diff < thres2
  'case 3'
end

しかし、IDL コードはそれほど単純ではなく、構文を正しく理解するのに苦労しています。ヘルプには次のように記載されています。 構文 IF 式 THEN ステートメント [ ELSE ステートメント ] または IF 式 THEN BEGIN ステートメント ENDIF [ ELSE BEGIN ステートメント ENDELSE ]

ただし、複数の式とelseifの使用方法の例は示していません。私は多くのバリエーションを試しましたが、うまくいかないようです。

誰にも提案がありますか?ここに私が試したいくつかのことがあります:

if (diff lt thres1) and (diff gt thres2) then begin
  print, 'case 1'
endif else begin
if (diff gt thres1) then
  print, 'case 2'
endif else begin
if (diff lt thres2) then
  print, 'case 3'
endif 

if (diff lt thres1) and (diff gt thres2) then begin
  print, 'case 1'
else (diff gt thres1) then
  print, 'case 2'
else (diff lt thres2) then
  print, 'case 3'
endif 
4

3 に答える 3

4

elseifIDL にはステートメントがありません。試す:

a = 1
b = 0.5

diff = a - b
thres1 = 1
thres2 = -1

if (diff lt thres1 && diff gt thres2) then begin
  print, 'case 1'
endif else if (diff gt thres1) then begin
  print, 'case 2'
endif else if (diff lt thres2) then begin
  print, 'case 3'
endif
于 2012-12-05T20:51:14.030 に答える
0

mgalloy の答えは正しいですが、1 行しかないときに begin/endif を使用しない (私のような) 人もいるかもしれません。(もちろん、誰かが戻って行を挿入しようとして、あなたが何をしたかを理解していない場合、これは問題につながります。そのため、Michael のアプローチの方がおそらく優れています...これは、この書式設定を見たときに、同じこと:

if (diff lt thres1 && diff gt thres2) then $
  print, 'case 1' $
else if (diff gt thres1) then $
  print, 'case 2' $
else if (diff lt thres2) then $
  print, 'case 3'

または、誰かが挿入されにくくなる可能性のある形式:

if      (diff lt thres1 && diff gt thres2) then print, 'case 1' $
else if (diff gt thres1)                   then print, 'case 2' $
else if (diff lt thres2)                   then print, 'case 3'
于 2013-01-09T17:14:13.777 に答える
0

だから私はそれを理解しました。IDL 言語を初めて使用する私たちのために。

IDL は if ステートメントごとに 2 つのケースしか処理できないように思われるため、別の 'if' ブロックに書き込む必要がありました。

これが誰かを助けることを願っています。

a = 1;
b = 2.5;

diff = a-b;
thres1 = 1;
thres2 = -1;

if diff gt thres1 then begin
  print,'case 1'
endif

if (diff lt thres2) then begin
  print,'case 2'
  endif else begin
  print,'case 3'
endelse 
于 2012-11-27T13:09:56.137 に答える