...
## Pour les entetes
S_ENT = ''
TS_ENT = 0
for n,f in G.st_ENT:
#print "Nom = %s format = %s " % (n,f)
S_ENT += "%0ds " % f
TS_ENT += f
...
## traitement de l'Entete
try:
fmt_ent="%%%03ds" % TS_ENT
l = fmt_ent % ligs[0]
D_ENT = struct.unpack( S_ENT , l )
except:
L.log_f("STRUCT PB unpack Entete ")
status = 1
Et voila dans D_ENT j'ai un tableau contenant les valeurs
C'est peut être pas top mais facile a suivre et à modifier
Par contre maintenant je voudrais controler
que la zone TYPENREG ou NSTRAL est bien constituer de Chiffre
ou d'alpha ou de sequence correspondant a un numero de tel
ou valider une date
dans un langage que j'ai bien connu (que peut etre certain reconnaitront
ADONIX ) j'avais la fonction format$
ex:
format$("N:3.2", 12) => 12.00
format$("K:AAA", "ccc" ) => CCC ou " " je sais plus
bref on pouvait faire :
if ZONE <> format$(FMT, ZONE)
=> alors format pas respecté
en python
if ZONE != ( FMT % ZONE ):
=> idem
mais l'expression des formats est plutot simple voire simpliste
format$("N:3.2", 12) => 12.00 format$("K:AAA", "ccc" ) => CCC ou " " je sais plus
bref on pouvait faire :
if ZONE <> format$(FMT, ZONE) => alors format pas respecté
en python
if ZONE != ( FMT % ZONE ): => idem
mais l'expression des formats est plutot simple voire simpliste bref ya pas mieux que le % ?
une petite regexp, avec le module re : http://www.amk.ca/python/howto/regex/
(et un pti coup de pouce depuis : http://regexlib.com/)
Michel Claveau - NoSpam SVP ; merci
Bonjour !
Format n'est pas si mauvais que ça. Exemple ci-dessous.
@-salutations -- Michel Claveau
# -*- coding: utf-8 -*-
n34.5678 s="Nombre:%.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:%.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:%+.2f(avec deux décimales)" % n print s
n34.5678 s="Nombre:%+.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:% .2f(notez l'espace après le %%)" % n print s
n34.5678 s="Nombre:% .2f(notez l'espace après le %%)" % n print s
n34.5678 s="Nombre:%11.2f(11 de largeur dont 2 décimales)" % n print s
n34.5678 nbdecimales=3 s="Nombre:% .*f(nb de décimales variable)" % (nbdecimales,n) print s
n34.5678 nbdecimales=3 largeur s="Nombre:%*.*f(largeur et nb de décimales variables)" % (largeur,nbdecimales,n) print s
n34.5678 s="Nombre:%012.2f(largeur 12, 2 décimales, complété par des 0)" % n print s
n34.5678 s="Nombre:%-12.2f(largeur 12, 2 décimales, aligné à gauche)" % n print s
n34.5678901 s="String:%s(conversion implicite)" % n print s
n34.5678901 s="String:%6s(la largeur ne tronque pas)" % n print s
n34.56 s="String:%6f(la largeur ne tronque pas)" % n print s
s="Entier:%d(sans décimales)" % n print s
s="String:%s(sans conversion implicite)" % str(n) print s
s="String:%s(avec conversion implicite)" % n print s
n='ABCD' s="String:%6s(largeur 6)" % n print s
n='ABCD' s="String:%-6s(largeur 6 cadrée à gauche)" % n print s
nB s="Caractère:%c(la valeur Ascii)" % n print s
nB s="Nombre:%o(valeur octale)" % n print s
nB s="Nombre:%x(valeur hexadécimale, lettre minuscule)" % n print s
nB s="Nombre:%X(valeur hexadécimale, lettre majuscule)" % n print s
dico={'user':'Titi', 'server':'ServeurMCI', 'IPserver':'192.168.1.9', 'urlserver':'http://claveau.info'} s="Le serveur %(server)s, dont le n° IP est %(IPserver)s, a pour url %(urlserver)s ; OK ?" % dico print s
Bonjour !
Format n'est pas si mauvais que ça.
Exemple ci-dessous.
@-salutations
--
Michel Claveau
# -*- coding: utf-8 -*-
n34.5678
s="Nombre:%.2f(avec deux décimales)" % n
print s
n=-1234.5678
s="Nombre:%.2f(avec deux décimales)" % n
print s
n=-1234.5678
s="Nombre:%+.2f(avec deux décimales)" % n
print s
n34.5678
s="Nombre:%+.2f(avec deux décimales)" % n
print s
n=-1234.5678
s="Nombre:% .2f(notez l'espace après le %%)" % n
print s
n34.5678
s="Nombre:% .2f(notez l'espace après le %%)" % n
print s
n34.5678
s="Nombre:%11.2f(11 de largeur dont 2 décimales)" % n
print s
n34.5678
nbdecimales=3
s="Nombre:% .*f(nb de décimales variable)" % (nbdecimales,n)
print s
n34.5678
nbdecimales=3
largeur
s="Nombre:%*.*f(largeur et nb de décimales variables)" %
(largeur,nbdecimales,n)
print s
n34.5678
s="Nombre:%012.2f(largeur 12, 2 décimales, complété par des 0)" % n
print s
n34.5678
s="Nombre:%-12.2f(largeur 12, 2 décimales, aligné à gauche)" % n
print s
n34.5678901
s="String:%s(conversion implicite)" % n
print s
n34.5678901
s="String:%6s(la largeur ne tronque pas)" % n
print s
n34.56
s="String:%6f(la largeur ne tronque pas)" % n
print s
s="Entier:%d(sans décimales)" % n
print s
s="String:%s(sans conversion implicite)" % str(n)
print s
s="String:%s(avec conversion implicite)" % n
print s
n='ABCD'
s="String:%6s(largeur 6)" % n
print s
n='ABCD'
s="String:%-6s(largeur 6 cadrée à gauche)" % n
print s
nB
s="Caractère:%c(la valeur Ascii)" % n
print s
nB
s="Nombre:%o(valeur octale)" % n
print s
nB
s="Nombre:%x(valeur hexadécimale, lettre minuscule)" % n
print s
nB
s="Nombre:%X(valeur hexadécimale, lettre majuscule)" % n
print s
dico={'user':'Titi', 'server':'ServeurMCI', 'IPserver':'192.168.1.9',
'urlserver':'http://claveau.info'}
s="Le serveur %(server)s, dont le n° IP est %(IPserver)s, a pour url
%(urlserver)s ; OK ?" % dico
print s
Format n'est pas si mauvais que ça. Exemple ci-dessous.
@-salutations -- Michel Claveau
# -*- coding: utf-8 -*-
n34.5678 s="Nombre:%.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:%.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:%+.2f(avec deux décimales)" % n print s
n34.5678 s="Nombre:%+.2f(avec deux décimales)" % n print s
n=-1234.5678 s="Nombre:% .2f(notez l'espace après le %%)" % n print s
n34.5678 s="Nombre:% .2f(notez l'espace après le %%)" % n print s
n34.5678 s="Nombre:%11.2f(11 de largeur dont 2 décimales)" % n print s
n34.5678 nbdecimales=3 s="Nombre:% .*f(nb de décimales variable)" % (nbdecimales,n) print s
n34.5678 nbdecimales=3 largeur s="Nombre:%*.*f(largeur et nb de décimales variables)" % (largeur,nbdecimales,n) print s
n34.5678 s="Nombre:%012.2f(largeur 12, 2 décimales, complété par des 0)" % n print s
n34.5678 s="Nombre:%-12.2f(largeur 12, 2 décimales, aligné à gauche)" % n print s
n34.5678901 s="String:%s(conversion implicite)" % n print s
n34.5678901 s="String:%6s(la largeur ne tronque pas)" % n print s
n34.56 s="String:%6f(la largeur ne tronque pas)" % n print s
s="Entier:%d(sans décimales)" % n print s
s="String:%s(sans conversion implicite)" % str(n) print s
s="String:%s(avec conversion implicite)" % n print s
n='ABCD' s="String:%6s(largeur 6)" % n print s
n='ABCD' s="String:%-6s(largeur 6 cadrée à gauche)" % n print s
nB s="Caractère:%c(la valeur Ascii)" % n print s
nB s="Nombre:%o(valeur octale)" % n print s
nB s="Nombre:%x(valeur hexadécimale, lettre minuscule)" % n print s
nB s="Nombre:%X(valeur hexadécimale, lettre majuscule)" % n print s
dico={'user':'Titi', 'server':'ServeurMCI', 'IPserver':'192.168.1.9', 'urlserver':'http://claveau.info'} s="Le serveur %(server)s, dont le n° IP est %(IPserver)s, a pour url %(urlserver)s ; OK ?" % dico print s
chris
Bonjour,
merci pour vos réponses, bon les regexp => pourquoi pas, mais difficile a relire 3 mois après le formats printf => pas assez riche mon fils ;-)
bref si j'ai le courage j'en fais une comme je veux et vous tiendrai au courant (même si cela n'intéresse personne ... ;-) )
A+ chris
Bonjour,
merci pour vos réponses, bon
les regexp => pourquoi pas, mais difficile a relire 3 mois après
le formats printf => pas assez riche mon fils ;-)
bref si j'ai le courage j'en fais une comme je veux et vous tiendrai
au courant (même si cela n'intéresse personne ... ;-) )