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

Last change on this file since 134 was 134, checked in by navarro, 18 years ago

change *.pro file properties (del eof-style, del executable, set keywords Id

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.2 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME:extractstru
6;
7; PURPOSE:extrait des elements d''une structure pour constituer une
8;         nouvelle structure
9;
10; CATEGORY: dibouille sur les structures
11;
12; CALLING SEQUENCE: res = extractstru(stru, liste)
13;
14; INPUTS:
15;
16;    stru: une structure
17;
18;    liste: un vecteur de string comportant les noms des elements de
19;    stru a virer (par DEFAUT) ou a garder (si GARDE est active)
20;
21; KEYWORD PARAMETERS:
22;
23;    /GARDE: specifie que la liste donnee concerne les elements de
24;    stru a garder
25;
26;    /VIRE: specifie que la liste donnee concerne les elements de
27;    stru a virer. Ce mot cle est active par defaut
28;
29; OUTPUTS:une stucture ou -1 en cas de pb
30;
31; COMMON BLOCKS:
32;
33; SIDE EFFECTS:
34;
35; RESTRICTIONS: none !!!
36;    liste peut contenir des noms d''elements qui ne sont pas ds stru,
37;    le programme se debrouille avec
38;
39; EXAMPLE:
40;
41;    IDL> extra=get_extra(/ok, year=1999, age_capitaine=35 )
42;    IDL> help, extra,/struct
43;    ** Structure <83e66bc>, 3 tags, length=6, refs=1:
44;       AGE_CAPITAINE   INT             35
45;       OK              INT              1
46;       YEAR            INT           1999
47;    IDL> help, extractstru(extra,['ok','hhuihi','YEAR']),/stru
48;    ** Structure <831afac>, 1 tags, length=2, refs=1:
49;       AGE_CAPITAINE   INT             35
50;    IDL> help, extractstru(extra,['ok','hhuihi','YEAR'],/garde),/stru
51;    ** Structure <834bbc4>, 2 tags, length=4, refs=1:
52;       OK              INT              1
53;       YEAR            INT           1999
54;
55; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr)
56;                      8/10/1999
57;-
58;------------------------------------------------------------
59;------------------------------------------------------------
60;------------------------------------------------------------
61FUNCTION extractstru, stru, liste, GARDE = garde, VIRE = vire
62;
63  compile_opt idl2, strictarrsubs
64;
65   if size(stru, /type) NE 8 then return,  -1
66   if size(liste, /type) NE 7 then return,  -1
67; cheking for garde and vire keywords
68   garde = keyword_set(garde)*(1-keyword_set(vire))
69   vire = keyword_set(vire)*(1-keyword_set(garde)) +(keyword_set(vire) EQ garde)
70;
71   tname = tag_names(stru)
72   index = make_selection(tname, strupcase(liste), /only_valid, /quiet)
73;
74   if garde then BEGIN ; on garde que la liste
75      if index[0] EQ -1 then return,  -1
76      if n_elements(index) EQ n_elements(tname) then return, stru
77      res = create_struct(tname[index[0]], stru.(index[0]))
78      if n_elements(index) GT 1 then for i = 1, n_elements(index)-1 do $
79            res = create_struct(res, tname[index[i]], stru.(index[i]))
80   ENDIF ELSE BEGIN ; on vire la liste
81      if n_elements(index) EQ n_elements(tname) then return,  -1
82      if index[0] EQ -1 then return, stru
83; on prend le complementaire de index pour obtenir les indices que
84; l''on garde
85      index = different(indgen(n_elements(tname)), index)
86      res = create_struct(tname[index[0]], stru.(index[0]))
87      if n_elements(index) GT 1 then for i = 1, n_elements(index)-1 do $
88            res = create_struct(res, tname[index[i]], stru.(index[i]))
89   ENDELSE
90
91   return, res
92end
Note: See TracBrowser for help on using the repository browser.