Re: Need Help Resolving ENDIF Errors [message #65522] |
Wed, 11 March 2009 07:35  |
pgrigis
Messages: 436 Registered: September 2007
|
Senior Member |
|
|
This thread is a typical example of scientific arguments:
a plethora of wild speculations based on insufficient data!
;-)
Ciao,
Paolo
Jean H. wrote:
> Hi,
>
> also don't forget, if you have ELSE begin statements, to close them by
> ENDELSE, not endif... (it's different in other languages, I make the
> mistake half of the time!)
>
> Jean
|
|
|
|
Re: Need Help Resolving ENDIF Errors [message #65526 is a reply to message #65523] |
Wed, 11 March 2009 05:25   |
David Gell
Messages: 29 Registered: January 2009
|
Junior Member |
|
|
On Mar 10, 3:38 pm, einszweil...@gmail.com wrote:
> I'm trying to run a procedure in IDL. The procedure has a series of
> IF LOOPS, each of minimal complexity - they are fairly simple.
>
> For example:
>
> XX=readfits('/home/kphil/img/img213.fits')
> YY=readfits('/home/kphil/img/img213.fits', EXTEN_NO=1)
> ZZ =YY
>
> G = where(ZZ ne 0)
> invarmap= ZZ * 0.0
> invarmap[G] = (1./(ZZ[G])^2)
>
> if ((where(XX ne XX))(0) ne -1) then begin
> ZZ[where(XX ne XX)] = 0
> XX[where(XX ne XX)] = 0
> endif
>
> The problem is that everything runs just great, until the ENDIF is
> reached. I CONSTANTLY get ENDIF errors.
>
> Why is this happening? I feel that my code is solid, but all I get
> are ENDIF errors.
>
> The .pro I'm running has about 7 IF LOOPS, and the ONLY errors I get
> are on the lines where ENDIF is.
>
> Any idea what the problem is? Help!
>
> Thanks in advance.
Usually, this error message appears at an END statement someplace
after the actual location of the syntax error. Check each of the seven
IF blocks to make sure that they are properly formed. Also if you have
other compound statements, e.g. FOR ... DO BEGIN ... ENDFOR or
WHILE .. DO BEGIN...ENDWHILE, make sure that they are properly formed.
Finally make sure that any continued statements have the $ character
at the end and that non-continued statements do not.
|
|
|
|
|
|
|
Re: Need Help Resolving ENDIF Errors [message #65535 is a reply to message #65534] |
Tue, 10 March 2009 14:26   |
Michael Galloy
Messages: 1114 Registered: April 2006
|
Senior Member |
|
|
einszweilieb@gmail.com wrote:
> On Mar 10, 3:38 pm, einszweil...@gmail.com wrote:
>> I'm trying to run a procedure in IDL. The procedure has a series of
>> IF LOOPS, each of minimal complexity - they are fairly simple.
>>
>> For example:
>>
>> XX=readfits('/home/kphil/img/img213.fits')
>> YY=readfits('/home/kphil/img/img213.fits', EXTEN_NO=1)
>> ZZ =YY
>>
>> G = where(ZZ ne 0)
>> invarmap= ZZ * 0.0
>> invarmap[G] = (1./(ZZ[G])^2)
>>
>> if ((where(XX ne XX))(0) ne -1) then begin
>> ZZ[where(XX ne XX)] = 0
>> XX[where(XX ne XX)] = 0
>> endif
>>
>> The problem is that everything runs just great, until the ENDIF is
>> reached. I CONSTANTLY get ENDIF errors.
>>
>> Why is this happening? I feel that my code is solid, but all I get
>> are ENDIF errors.
>>
>> The .pro I'm running has about 7 IF LOOPS, and the ONLY errors I get
>> are on the lines where ENDIF is.
>>
>> Any idea what the problem is? Help!
>>
>> Thanks in advance.
>
> For clarity the error message always looks something like:
>
> endif
> ^
> % Syntax error.
> At: /home/kphil/idl/pro/cltin.pro, Line 37
>
> Ugh...
My guess would be that you are forgetting the BEGIN. If there are only 7
loops, maybe it's short enough to show the entire code?
Mike
--
www.michaelgalloy.com
Associate Research Scientist
Tech-X Corporation
|
|
|
Re: Need Help Resolving ENDIF Errors [message #65536 is a reply to message #65535] |
Tue, 10 March 2009 14:21   |
ben.bighair
Messages: 221 Registered: April 2007
|
Senior Member |
|
|
On Mar 10, 4:41 pm, einszweil...@gmail.com wrote:
> On Mar 10, 3:38 pm, einszweil...@gmail.com wrote:
>
>
>
>> I'm trying to run a procedure in IDL. The procedure has a series of
>> IF LOOPS, each of minimal complexity - they are fairly simple.
>
>> For example:
>
>> XX=readfits('/home/kphil/img/img213.fits')
>> YY=readfits('/home/kphil/img/img213.fits', EXTEN_NO=1)
>> ZZ =YY
>
>> G = where(ZZ ne 0)
>> invarmap= ZZ * 0.0
>> invarmap[G] = (1./(ZZ[G])^2)
>
>> if ((where(XX ne XX))(0) ne -1) then begin
>> ZZ[where(XX ne XX)] = 0
>> XX[where(XX ne XX)] = 0
>> endif
Hi,
Do you really mean where(XX ne XX)? XX ne XX should give you and
array the size of XX filled with zeroes.
IDL> xx = INDGEN(10)
IDL> print, xx ne xx
0 0 0 0 0 0 0 0 0 0
I have no idea how to resolve the endif error or if the above is
related. However, in general (regardless of the comparison you are
making) you want to do the WHERE search just once.
index = WHERE(something NE somethingElse, count)
if (count NE 0) then begin
aThirdThing = ZZ[index]
endif
No point in searching your array repeatedly if you don't need to.
Ben
|
|
|
|
|
Re: Need Help Resolving ENDIF Errors [message #65618 is a reply to message #65537] |
Wed, 11 March 2009 08:19  |
Jeremy Bailin
Messages: 618 Registered: April 2008
|
Senior Member |
|
|
On Mar 10, 4:41 pm, einszweil...@gmail.com wrote:
> On Mar 10, 3:38 pm, einszweil...@gmail.com wrote:
>
>
>
>> I'm trying to run a procedure in IDL. The procedure has a series of
>> IF LOOPS, each of minimal complexity - they are fairly simple.
>
>> For example:
>
>> XX=readfits('/home/kphil/img/img213.fits')
>> YY=readfits('/home/kphil/img/img213.fits', EXTEN_NO=1)
>> ZZ =YY
>
>> G = where(ZZ ne 0)
>> invarmap= ZZ * 0.0
>> invarmap[G] = (1./(ZZ[G])^2)
>
>> if ((where(XX ne XX))(0) ne -1) then begin
>> ZZ[where(XX ne XX)] = 0
>> XX[where(XX ne XX)] = 0
>> endif
>
>> The problem is that everything runs just great, until the ENDIF is
>> reached. I CONSTANTLY get ENDIF errors.
>
>> Why is this happening? I feel that my code is solid, but all I get
>> are ENDIF errors.
>
>> The .pro I'm running has about 7 IF LOOPS, and the ONLY errors I get
>> are on the lines where ENDIF is.
>
>> Any idea what the problem is? Help!
>
>> Thanks in advance.
>
> For clarity the error message always looks something like:
>
> endif
> ^
> % Syntax error.
> At: /home/kphil/idl/pro/cltin.pro, Line 37
>
> Ugh...
My votes:
1. Yes, there is a use of asking where(XX ne XX) - it tells you where
there are NaNs. I use it all the time.
2. Definitely take Ben's advice about only having one WHERE!!!
3. I think Andi's speculation is the right one... you're probably
using @foo.pro instead of .run foo.pro.
-Jeremy.
|
|
|
Re: Need Help Resolving ENDIF Errors [message #65620 is a reply to message #65522] |
Wed, 11 March 2009 08:02  |
ben.bighair
Messages: 221 Registered: April 2007
|
Senior Member |
|
|
On Mar 11, 10:35 am, Paolo <pgri...@gmail.com> wrote:
> This thread is a typical example of scientific arguments:
> a plethora of wild speculations based on insufficient data!
>
> ;-)
>
Just keeping limber for the upcoming grant renewal season!
|
|
|