Vérifier un format [un peu long]

Le
chris
Bonjour,

je n'ai pas encore beaucoup cherché mais je vous pose la question
quand même après cela peut faire avancer le schmillblick.

Voila j'ai un fichier en bel ascii tout frais à découper en position fixe

La, python avec unpack c'est génial (unpack on dirait du perl )
extrait :

## Structure de l'entete
st_ENT = [
( 'TYPENREG', 2 ) ,
( 'DATETRAN', 10 ),
( 'CTIDEM', 3 ),
( 'CNFLUX', 2 ),
( 'NSTRAL', 5 )


## 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

bref ya pas mieux que le % ?

Merci d'avance

Cordialement
C. BONNET
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JB
Le #17590101
chris a écrit :
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
Le #17612781
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
chris
Le #17666701
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
Publicité
Poster une réponse
Anonyme