1 #@ MODIF lire_table_ops Macro DATE 26/05/2005 AUTEUR MCOURTOI M.COURTOIS
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 # ======================================================================
23 # ------------------------------------------------------------------------------
24 def lecture_table(texte,nume,separ):
25 """Méthode de construction du dictionnaire PARAMETRE / LISTE DE VALEURS
27 Les lignes contenant autre chose que des séquences de nombres
28 réels et de séparateurs sont considérées comme délimitant deux
29 fonctions différentes. Cette situation correspond à l exception
30 ValueError levée par le map de float. Le deuxieme indice de
31 VALE_PARA et VALE_RESU est l indice permettant de pointer sur la
32 fonction voulue, au sens de ce découpage.
35 from Utilitai.transpose import transpose
36 if string.strip(separ)=='' : separ=None
39 idt_deb='#DEBUT_TABLE\n'
40 idt_fin='#FIN_TABLE\n'
42 if nume>texte.count(idt_deb) :
43 message= "<F> <CREA_TABLE> NUME_TABLE :le nombre de blocs de tables dans "
44 message=message+"le fichier est "+str(texte.count(idt_deb))
45 return 1,message,None,None,None
47 texte=texte[texte.index(idt_deb)+1:]
48 texte=texte[:texte.index(idt_fin)]
50 titre_tab=[string.rstrip(elem[7:-1]) for elem in texte if elem.find(idt_tit)!=-1]
51 texte_tab=[elem.split(separ) for elem in texte if elem.find(idt_tit)==-1]
55 for line in texte_tab :
58 if ( elem != '' and elem !='\n') :
59 ligne.append(string.strip(elem))
60 tab_trav.append(ligne)
63 list_para=texte_tab[0]
64 list_type=texte_tab[1]
67 nb_para=len(texte_tab[0])
69 for line in texte_tab :
70 if len(line)!=nb_para :
71 message= "<F> <CREA_TABLE> incoherence dans le nombre de colonnes "
72 message=message+"de la table a lire"
73 return 1,message,None,None,None
74 texte_tab=transpose(texte_tab)
75 for i in range(nb_para):
81 texte_tab[i]=map(float,texte_tab[i])
84 # Presence de - dans la ligne
85 for indice in range(len(texte_tab[i])):
86 if texte_tab[i][indice]!='-':
87 tab_trav.append(indice+1)
88 list_val.append(float(texte_tab[i][indice]))
90 nume_lign.append(tab_trav)
94 texte_tab[i]=map(int,texte_tab[i])
96 # Presence de - dans la ligne
98 for indice in range(len(texte_tab[i])):
99 if texte_tab[i][indice]!='-':
100 tab_trav.append(indice+1)
101 list_val.append(float(texte_tab[i][indice]))
102 nume_lign.append(tab_trav)
103 texte_tab[i]=list_val
106 try : nume_lign.append([0])
107 except ValueError: pass
109 tab_lue[list_para[i]]=(list_type[i],texte_tab[i],nume_lign[i])
111 return 0,None,titre_tab,list_para,tab_lue
114 # ------------------------------------------------------------------------------
115 def lire_table_ops(self,UNITE,FORMAT,NUME_TABLE,SEPARATEUR,
116 TYPE_TABLE,PARA,TITRE,**args):
117 """Méthode corps de la macro LIRE_TABLE
121 from Utilitai.Utmess import UTMESS
122 from Utilitai.UniteAster import UniteAster
125 ### On importe les definitions des commandes a utiliser dans la macro
126 CREA_TABLE =self.get_cmd('CREA_TABLE')
128 ### La macro compte pour 1 dans la numerotation des commandes
131 ### Lecture de la table dans un fichier d unité logique UNITE
133 nomfich=UL.Nom(UNITE)
134 if not os.path.isfile(nomfich):
135 UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich)
137 file=open(nomfich,'r')
138 texte=file.readlines()
141 ### mise en forme de la liste de valeurs suivant le format choisi :
143 ier,message,titr_tab,list_para,tab_lue=lecture_table(texte,NUME_TABLE,SEPARATEUR)
145 self.cr.fatal(message)
149 ### création de la table ASTER :
150 self.DeclareOut('ut_tab',self.sd)
153 for tab_para in list_para:
155 mcsimp['PARA']=tab_para
157 if tab_lue[tab_para][2] != [0] :
158 mcsimp['NUME_LIGN']=tab_lue[tab_para][2]
160 if tab_lue[tab_para][0] not in ('I','R') :
161 mcsimp['TYPE_K'] =tab_lue[tab_para][0]
162 mcsimp['LISTE_K']=tab_lue[tab_para][1]
163 elif tab_lue[tab_para][0]=='I' :
164 mcsimp['LISTE_I']=tab_lue[tab_para][1]
165 elif tab_lue[tab_para][0]=='R' :
166 mcsimp['LISTE_R']=tab_lue[tab_para][1]
168 mcfact.append( _F(**mcsimp) )
169 num_col = num_col + 1
171 motscles['LISTE']=mcfact
173 ut_tab=CREA_TABLE(TITRE=titr_tab,TYPE_TABLE=TYPE_TABLE, **motscles)
175 # remet UNITE dans son état initial