source: trunk/SRC/ToBeReviewed/STRUCTURE/extractstru.pro @ 325

Last change on this file since 325 was 325, checked in by pinsard, 17 years ago

modification of some headers (+some corrections) to prepare usage of the new idldoc

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 2.6 KB
Line 
1;+
2; @file_comments
3; extract elements of a structure to constitute a new structure.
4;
5; @categories
6; Utilities
7;
8; @param STRU {in}{required}
9; A structure
10;
11; @param LISTE {in}{required}{type=vector}
12; A vector of string including names of STRU to be deleted
13; (by default) or to be kept (if KEEP is activated).
14;
15; @keyword KEEP
16; Specify that the given liste concern elements of STRU to be kept.
17;
18; @keyword DELETE
19; Specify  that the given liste concern elements of STRU to be deleted.
20; This keyword is activated by default.
21;
22; @returns
23; A structure or -1 in case of problem
24;
25; @examples
26;
27;    IDL> extra=get_extra(/ok, year=1999, age_capitaine=35 )
28;    IDL> help, extra,/struct
29;    ** Structure <83e66bc>, 3 tags, length=6, refs=1:
30;       AGE_CAPITAINE   INT             35
31;       OK              INT              1
32;       YEAR            INT           1999
33;    IDL> help, extractstru(extra,['ok','hhuihi','YEAR']),/stru
34;    ** Structure <831afac>, 1 tags, length=2, refs=1:
35;       AGE_CAPITAINE   INT             35
36;    IDL> help, extractstru(extra,['ok','hhuihi','YEAR'],/keep),/stru
37;    ** Structure <834bbc4>, 2 tags, length=4, refs=1:
38;       OK              INT              1
39;       YEAR            INT           1999
40;
41; @history
42; Sebastien Masson (smasson\@lodyc.jussieu.fr)
43;                      8/10/1999
44;
45; @version
46; $Id$
47;
48;-
49FUNCTION extractstru, stru, liste, KEEP = keep, DELETE = delete
50;
51  compile_opt idl2, strictarrsubs
52;
53   if size(stru, /type) NE 8 then return,  -1
54   if size(liste, /type) NE 7 then return,  -1
55; checking for keep and vire keywords
56   keep = keyword_set(keep)*(1-keyword_set(delete))
57   delete = keyword_set(delete)*(1-keyword_set(keep)) +(keyword_set(delete) EQ keep)
58;
59   tname = tag_names(stru)
60   index = make_selection(tname, strupcase(liste), /only_valid, /quiet)
61;
62   if keep then BEGIN ; We just keep the list
63      if index[0] EQ -1 then return,  -1
64      if n_elements(index) EQ n_elements(tname) then return, stru
65      res = create_struct(tname[index[0]], stru.(index[0]))
66      if n_elements(index) GT 1 then for i = 1, n_elements(index)-1 do $
67            res = create_struct(res, tname[index[i]], stru.(index[i]))
68   ENDIF ELSE BEGIN ; We delete the list
69      if n_elements(index) EQ n_elements(tname) then return,  -1
70      if index[0] EQ -1 then return, stru
71; We take the complementary one of index to obtain indexes we keep.
72      index = different(indgen(n_elements(tname)), index)
73      res = create_struct(tname[index[0]], stru.(index[0]))
74      if n_elements(index) GT 1 then for i = 1, n_elements(index)-1 do $
75            res = create_struct(res, tname[index[i]], stru.(index[i]))
76   ENDELSE
77
78   return, res
79end
Note: See TracBrowser for help on using the repository browser.