[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: translating an array name to a string

Alex Schuster wrote:
> David Williams wrote:
> > Hi. This is probably a very basic IDL question, so apologies if that's
> > the case. I'm looking for a way to translate the name of an array (e.g.
> > "DATACUBE1") into a string that I can use in titles and/or in feedback
> > at the prompt. I want to make my routines more user-friendly, and I hate
> > forcing a title
> Have a look at the OUTPUT keyword to HELP:
> IDL> help, movie
> MOVIE           BYTE      = Array[256, 256, 64]
> IDL> help, movie, output=output
> IDL> print, output
> MOVIE           BYTE      = Array[256, 256, 64]
> CLU> print, (str_sep( output[0], " "))[0]

Also try:


Don't try looking this one up in the manual.  Neither of these
operations are supported.  RSI reserves the right to remove or retool
routine_names() AND/OR the output format of help.  That's the price you

By the way, for those of you using routine_names for heavy magic... you
might consider examining the following extra-cautions snippet to export
a variable to the $MAIN$ level:

   catch, err
   if err ne 0 then begin       
      ;; An undefvar indicates routine_info ran and 
      ;; the variable is free
      if !ERROR_STATE.NAME ne 'IDL_M_UNDEFVAR' then begin 
	message,"Can't complete operation... Try obj=sp_sel()"   
   ;; If we need to check if the variable name is available, do so.
   if var_free eq 0 then $
   if n_elements(rn) ne 0 then begin
	message,'A variable named '+var_name+' already exists.'

   ;; Still here... we need to export ourself to the main level

basically the idea is to wrap routine_names as a string in
call_function, to allow your routine to compile even if RSI yanks or
renames it (it wouldn't compile if you tried to call it directly). 
You'll get an error, of course, which will be caught.  You have to
discriminate between errors caused by the successful operation of
routine_names(), and those caused by incorrect arguments, changed
keywords (IDL_M_KEYWORD_BAD), or other mutations routine_names() has
undergone (such as vanishing altogether -- IDL_M_UPRO_UNDEF).  You
obviously have to have a backup plan too, to tell your users what to do
in case routine_names() has broken.  But it's better than your program
not running at all though.


 J.D. Smith                  |   WORK: (607) 255-6263
 Cornell Dept. of Astronomy  |         (607) 255-5842
 304 Space Sciences Bldg.    |    FAX: (607) 255-5875  
 Ithaca, NY 14853            |