2012-11-26 3 views
2

Я пытаюсь получить простую инструкцию elseif в IDL, и у меня есть время с ней. Код matlab выглядит примерно так.idl elseif problems/confusion

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 НАЧАТЬ заявления 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 
+0

Если какое-либо значение равно пороговому значению, то ни один из случаев не будет выполняться –

+0

да, вы Я должен был сказать, что это не логика, которая вызывает у меня проблемы, но этот фактический синтаксис. IDL не будет компилироваться и выполняться с помощью c Пример, который я показываю. – nori

ответ

3

В IDL нет документа elseif. Попробуйте: ответ

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 
+0

Спасибо, mgalloy! Извините, мой ответ был настолько запоздалым, что я был в отпуске и просто вернулся к работе. Счастливый 2013! – nori

0

Итак, я понял. Для тех из нас, кто знаком с языком IDL.

Мне кажется, что IDL может обрабатывать только два случая для каждого оператора if, поэтому мне пришлось писать в другом блоке 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 
0

mgalloy является правильным, но вы также можете видеть, что люди (как я), которые не используют начать/ENDIF, когда есть только одна строка. (конечно, это приводит к проблемам, если кто-то возвращается и пытается вставить строку, не понимая, что вы сделали, поэтому подход Майкла, вероятно, лучше ... это просто так, что, когда вы видите это форматирование, вы понимаете, что это делает То же самое:

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' 
+0

Спасибо, Джо, действительно признателен за другой вариант. ура! – nori