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

Last change on this file since 375 was 375, checked in by pinsard, 16 years ago

improvements of headers (paragraphs and alignments)

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