1 | ;------------------------------------------------------------ |
---|
2 | ;------------------------------------------------------------ |
---|
3 | ;------------------------------------------------------------ |
---|
4 | ;+ |
---|
5 | ; NAME:struct2string |
---|
6 | ; |
---|
7 | ; PURPOSE:convert a structure to an "executable string" |
---|
8 | ; |
---|
9 | ; CATEGORY:bidouille |
---|
10 | ; |
---|
11 | ; CALLING SEQUENCE:sting=struct2string(struct) |
---|
12 | ; |
---|
13 | ; INPUTS:struct: a structure |
---|
14 | ; |
---|
15 | ; KEYWORD PARAMETERS: |
---|
16 | ; |
---|
17 | ; MAX_STRUCT_LENGTH : the maximum length of the structure |
---|
18 | ; permetted to convert the structure to string. Default is |
---|
19 | ; 10000l. |
---|
20 | ; |
---|
21 | ; /DIRECT2STRING: to get a string instead an "executable string" |
---|
22 | ; |
---|
23 | ; /CUT_IN_STRING: try it |
---|
24 | ; |
---|
25 | ; OUTPUTS: |
---|
26 | ; |
---|
27 | ; SIDE EFFECTS:use tostr.pro, cf this function header! |
---|
28 | ; |
---|
29 | ; RESTRICTIONS:use tostr.pro, cf this function header! |
---|
30 | ; |
---|
31 | ; EXAMPLE: |
---|
32 | ; |
---|
33 | ; IDL> print, struct2string(!d) |
---|
34 | ; create_struct('NAME','X','X_SIZE',891,'Y_SIZE',630,'X_VSIZE' |
---|
35 | ; ,891,'Y_VSIZE',630,'X_CH_SIZE',6,'Y_CH_SIZE',10,'X_PX_CM' |
---|
36 | ; ,40.0000,'Y_PX_CM',40.0000,'N_COLORS',16777216,'TABLE_SIZE' |
---|
37 | ; ,256,'FILL_DIST',1,'WINDOW',32,'UNIT',0,'FLAGS',328124,'ORIGIN' |
---|
38 | ; ,[0,0],'ZOOM',[1,1]) |
---|
39 | ; |
---|
40 | ; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr) |
---|
41 | ; 2000 07 03 |
---|
42 | ;- |
---|
43 | ;------------------------------------------------------------ |
---|
44 | ;------------------------------------------------------------ |
---|
45 | ;------------------------------------------------------------ |
---|
46 | FUNCTION struct2string, struct, CUT_IN_STRING = cut_in_string, MAX_STRUCT_LENGTH = max_struct_length, DIRECT2STRING = direct2string |
---|
47 | if size(struct, /type) NE 8 then return, '' |
---|
48 | if NOT keyword_set(max_struct_length) then max_struct_length = 10000l |
---|
49 | if n_tags(struct, /length) GT max_struct_length then begin |
---|
50 | rien = report('The structure is too big to be converted to string! !C See the MAX_STRUCT_LENGTH keyword') |
---|
51 | return, '' |
---|
52 | endif |
---|
53 | names = tag_names(struct) |
---|
54 | case 1 of |
---|
55 | keyword_set(direct2string):BEGIN |
---|
56 | res = names[0]+'='+tostr(struct.(0)) |
---|
57 | if n_tags(struct) GT 1 then begin |
---|
58 | FOR i = 1, n_tags(struct)-1 do begin |
---|
59 | res = res+', '+names[i]+'='+tostr(struct.(i)) |
---|
60 | endfor |
---|
61 | endif |
---|
62 | |
---|
63 | END |
---|
64 | keyword_set(CUT_IN_STRING):BEGIN |
---|
65 | res = 'create_struct('''+names[0]+''','+tostr(struct.(0))+')' |
---|
66 | if n_tags(struct) GT 1 then begin |
---|
67 | FOR i = 1, n_tags(struct)-1 do begin |
---|
68 | res = [res, 'create_struct(res,'''+names[i]+''','+tostr(struct.(i))+')'] |
---|
69 | endfor |
---|
70 | endif |
---|
71 | END |
---|
72 | ELSE:BEGIN |
---|
73 | res = 'create_struct('''+names[0]+''','+tostr(struct.(0)) |
---|
74 | if n_tags(struct) GT 1 then begin |
---|
75 | FOR i = 1, n_tags(struct)-1 do begin |
---|
76 | res = res+','''+names[i]+''','+tostr(struct.(i)) |
---|
77 | endfor |
---|
78 | endif |
---|
79 | res = res+')' |
---|
80 | END |
---|
81 | endcase |
---|
82 | return, res |
---|
83 | end |
---|