;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME: strkeywd (string keywords) ; ; PURPOSE: traduit une sturcture en un string pouvant etre utilise ; pour specifier des keywords ds l''appelle d''une fonction qd on ; utilise execute (cf l''exemple) ; ; CATEGORY: pour passer des mots cles avec execute ! ; ; CALLING SEQUENCE:res=strkeywd(struct) ; ; INPUTS:struct: une structure ; ; KEYWORD PARAMETERS: ; ; OUTPUTS:un string compose de la facon suivante: ; pour chaque element de la structure, on ecrit une partie du ; string sous la forme: ; 'nom_de_l''element=contennu de l''element' ; ; COMMON BLOCKS: ; ; SIDE EFFECTS: ; ; Si un element de la structure contient un tableau, il sera ; convertit en vecteur. ; ; RESTRICTIONS: ; ; attention cette fonction comporte des boucles, des if et des cases ; ds tous les sens. Elle ne doit donc pas etre utilisee avec des ; structure de grosse taille (avec bcp d''elements et avec des ; elements etant de gros tableaux). ; la structure en entree ne doit pas contenir de Complex floating, de ; structure, de Double-precision complex, de Pointer, de Object ; reference, de Unsigned Integer, de Unsigned Longword Integer, de ; 64-bit Integer, de Unsigned 64-bit Integer ; ; ; ; EXAMPLE: ; ; on cree une structure ; IDL> b=get_extra(ok=111, year=[1997,1998,1999], age_capitaine=35) ; IDL> help, b,/struct ; ** Structure <817f4bc>, 3 tags, length=10, refs=1: ; AGE_CAPITAINE INT 35 ; OK INT 111 ; YEAR INT Array[3] ; on met cette structure sous forme de string ; IDL> a=strkeywd(b) ; IDL> print, a ; AGE_CAPITAINE=35, OK=111, YEAR=[1997,1998,1999] ; maintenant on peut utiliser le string a pour passer des mots cles ds ; une fonction a l''aide de execute!! ; IDL> test=execute('c=get_extra('+a+')') ; IDL> help, c,/struct ; ** Structure <817f2dc>, 3 tags, length=10, refs=1: ; AGE_CAPITAINE INT 35 ; OK INT 111 ; YEAR INT Array[3] ; ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) ; 11/10/1999 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ FUNCTION strkeywd, struct ; compile_opt idl2, strictarrsubs ; if size(struct, /type) NE 8 then return, '' tname = tag_names(struct) if n_elements(tname) EQ 0 then return, '' ;------------------------------------------------------------ ; on s''occupe du premier element ;------------------------------------------------------------ res = strlowcase(tname[0])+'='+tostr(struct.(0)) if n_elements(tname) EQ 1 then return, res ;------------------------------------------------------------ ; on s''occupe des autres elements ;------------------------------------------------------------ for n = 1,n_elements(tname)-1 do res = res+', '+strlowcase(tname[n])+'='+tostr(struct.(n)) ; return, res end