1 #@ MODIF impr_table_ops Macro DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 # RESPONSABLE MCOURTOI M.COURTOIS
28 # ------------------------------------------------------------------------------
29 def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
31 Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
32 Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
37 from Cata.cata import table_jeveux
38 from Utilitai.Utmess import UTMESS
39 from Utilitai.UniteAster import UniteAster
41 # La macro compte pour 1 dans la numerotation des commandes
44 # On importe les definitions des commandes a utiliser dans la macro
45 # Le nom de la variable doit etre obligatoirement le nom de la commande
46 DETRUIRE = self.get_cmd('DETRUIRE')
47 RECU_FONCTION = self.get_cmd('RECU_FONCTION')
49 #----------------------------------------------
50 # 0. Traitement des arguments, initialisations
51 # unité logique des fichiers réservés
57 if args['UNITE'] and args['UNITE']<>6:
58 nomfich=UL.Nom(args['UNITE'])
59 if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size<>0:
61 UTMESS('A','TABLE0_6',valk=nomfich)
63 # 0.2. Création des dictionnaires des FILTRES
66 for Fi in args['FILTRE']:
67 dF = Fi.cree_dict_valeurs(Fi.mc_liste)
69 if dF[mc]==None: del dF[mc]
71 # format pour l'impression des filtres
72 form_filtre='\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
74 # 0.3. Création de la liste des tables (une seule sans SENSIBILITE)
75 form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
77 if args['SENSIBILITE']:
78 lps=args['SENSIBILITE']
79 if not type(lps) in (list, tuple):
82 ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom)
84 sdtab = table_jeveux(ncomp)
85 tabs = sdtab.EXTR_TABLE()
86 tabs.titr = TABLE.TITRE() + tabs.titr + form_sens % (ps.get_name(), ncomp)
87 ltab.append([tabs, sdtab])
89 ltab.append([TABLE.EXTR_TABLE(), TABLE])
94 # 0.4.1. liste des paramètres à conserver
95 nom_para=ltab[0][0].para
97 nom_para=args['NOM_PARA']
98 if not type(nom_para) in (list, tuple):
101 # 0.4.2. Traiter le cas des UL réservées
102 if args['UNITE'] and args['UNITE'] in ul_reserve:
103 UL.Etat(args['UNITE'], etat='F')
105 #----------------------------------------------
106 # Boucle sur les tables
107 for tab, sdtab in ltab:
109 # ----- 1. Infos de base
111 print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()
114 tab.titr=args['TITRE'] + '\n' + tab.titr
118 col = getattr(tab, Fi['NOM_PARA'])
119 # peu importe le type
120 opts=[Fi[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if Fi.has_key(k)]
122 for k in ('CRITERE','PRECISION'):
125 tab = tab & ( getattr(col, Fi['CRIT_COMP'])(*opts,**kargs) )
126 # trace l'operation dans le titre
127 #if FORMAT in ('TABLEAU','ASTER'):
128 tab.titr+=form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'], \
129 ' '.join([str(v) for v in opts]))
133 # une seule occurence de TRI
135 dT=T0.cree_dict_valeurs(T0.mc_liste)
136 tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])
138 # ----- 4. Impression
139 # vérification des paramètres
141 if not p in tab.para:
142 UTMESS('A','TABLE0_7',valk=p)
144 # sélection des paramètres et suppression des colonnes vides
146 timp = timp.SansColonneVide()
148 # passage des mots-clés de mise en forme à la méthode Impr
155 # pour l'impression des fonctions
161 # 4.1. au format TABLEAU
162 if FORMAT=='TABLEAU':
163 # surcharge par les formats de l'utilisateur
165 'csep' : args['SEPARATEUR'],
166 'ccom' : args['COMMENTAIRE'],
167 'ccpara' : args['COMM_PARA'],
168 'cdeb' : args['DEBUT_LIGNE'],
169 'cfin' : args['FIN_LIGNE'],
172 # 4.2. au format AGRAF
173 elif FORMAT=='AGRAF':
174 kargs['dform']={ 'formR' : '%12.5E' }
175 kfonc['FORMAT']='TABLEAU'
177 # 4.3. au format XMGRACE et dérivés
178 elif FORMAT=='XMGRACE':
179 kargs['dform']={ 'formR' : '%.8g' }
180 kargs['PILOTE']=args['PILOTE']
181 kfonc['PILOTE']=args['PILOTE']
183 # 4.4. format spécifié dans les arguments
185 kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
187 # 4.5. regroupement par paramètre : PAGINATION
188 if args['PAGINATION']:
189 l_ppag=args['PAGINATION']
190 if not type(l_ppag) in (list, tuple):
192 kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
193 l_para_err = [p for p in l_ppag if not p in nom_para]
194 if len(l_para_err)>0:
195 UTMESS('A','TABLE0_8',valk=l_para_err)
199 # ----- 5. IMPR_FONCTION='OUI'
200 if args['IMPR_FONCTION'] == 'OUI':
201 # cherche parmi les cellules celles qui contiennent un nom de fonction
203 p_extr = Set(['FONCTION', 'FONCTION_C'])
204 p_extr.intersection_update(timp.para)
206 # on réduit timp aux colonnes FONCTION et FONCTION_C
207 textr = timp.__getitem__(list(p_extr))
209 for par,cell in row.items():
210 if type(cell) in (str, unicode):
212 if aster.getvectjev('%-19s.PROL' % cell) != None:
213 dfon.append(['%-19s' % cell, par])
214 # impression des fonctions trouvées
216 __fonc=RECU_FONCTION(
223 TITRE = 'Fonction %s' % f,
225 __fonc.Trace(**kfonc)
226 DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,)
228 # 99. Traiter le cas des UL réservées
232 # ------------------------------------------------------------------------------
233 def fmtF2PY(fformat):
234 """Convertit un format Fortran en format Python (printf style).
235 Gère uniquement les fortrans réels, par exemple : E12.5, 1PE13.6, D12.5...
238 matP=re.search('([0-9]+)P',fformat)
240 fmt+=' '*int(matP.group(1))
241 matR=re.search('([eEdDfFgG]{1})([\.0-9]+)',fformat)
243 fmt+='%'+matR.group(2)+re.sub('[dD]+','E',matR.group(1))
246 except (ValueError, TypeError), msg:
249 print 'Format par défaut utilisé :',fmt