Test sur le "format" d'une chaine de caractères

Résolu
arkwonn Messages postés 2 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 1 mars 2010 - 27 févr. 2010 à 01:41
arkwonn Messages postés 2 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 1 mars 2010 - 1 mars 2010 à 22:31
Bonjour.

Souhaitant personnaliser un script python, ce que je voudrais coder est un "test de format d'une chaine de caractères".
Concrètement, je souhaite vérifier si une chaine de caractère est au format d'une clé WEP 64 ou 128 bits, càd selon les schémas suivant:
XXXXXXXXXX
XX:XX:XX:XX:XX
XXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

De plus les caractères (X) ne peuvent être que:
0;1;2;3;4;5;6;7;8;9;A;B;C;D;E;F

N'ayant que des bases et de faibles notions en python, ceci me restreint à le faire avec une suite de if, et verifier la correspondance de chaque caractère...
Ceci etant fastidieux, très long et épuisant, je me demandais s'il etait possible de réaliser cela avec le moins de lignes de codes possible.
Merci de votre réponse
A voir également:

2 réponses

lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
1 mars 2010 à 22:20
Bonsoir,

Ci-joint une proposition pour tenter de répondre au problème posé.

Je propose de faire 3 contrôles:
[list]
Un contrôle de longueur de chaines
Un contrôle de validité des caractères
Un contrôle de format
/list
# -*- coding: ISO-8859-15 -*-
import sys

#"XXXXXXXXXX"                               Longueur = 10
#"XX:XX:XX:XX:XX"                           Longueur = 14
#"XXXXXXXXXXXXXXXXXXXXXXXXXX"               Longueur = 26
#"XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"   Longueur = 38

#La liste contient les caractères autorisées
lst_ref_car = [":","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]

#La liste contient les longueurs de chaines autorisées
lst_ref_long = [10,14,26,38]

#chaine = "ABCDEF01x:"
#chaine = "AB:CD:EF:12::3"
#chaine = "AB:CD:EF:12:32"
chaine = "AB:CD:EF:01:23:45:67:89:AA:BB:CC:DD:EE"


#1-Contrôle de la longueur des chaines
long = len(chaine)
if long in lst_ref_long:
    print "OK : Longueur correcte  ", chaine, "  a une longueur de :", long
else:
    print "ERROR : Longueur incorrecte  ", chaine, "  a une longueur de :", long
    sys.exit()

#2-Contrôle de la validité des caractères
for car in chaine:
    if car not in lst_ref_car:
        print "ERROR : dans la chaine  ",chaine, "  le caractere >" ,car ,"< n'est pas autorisé"
        sys.exit()
print "OK : La chaine  " ,chaine ,"  contient des caractères autorisés"

#3-Contrôle des formats
#Les chaines de longueur 10 ou 26 ne doivent pas contenir le caractère ":"
if long 10 or long 26:
    if chaine.find(":") >= 0:
        print "ERROR : dans la chaine  ",chaine, "  le caractere > : < n'est pas autorisé"
    else:
        print "OK : Format de  >", chaine, "  est correct"

#Les chaines de longueur 14 ou 28 doivent contenir ":" tous les deux caractères (XX:)
if long 14 or long 38:
    #La méthode SPLIT renvoie une LIST découpée sur l'argument ":"
    # chaque élément de la liste doit avoir une longuer de 2 caractères
    lst_test = chaine.split(":")
    for element in lst_test:
        if len(element) != 2:
            print "ERROR : Format incorrect dans la chaine  ",chaine, "  le caractere > : < est mal positionné"
            sys.exit()
    print "OK : Le format de la chaine ", chaine, " est correct"


Je n'ai pas testé tous les cas de figure.
En espérant avoir répondu à la question.
3
arkwonn Messages postés 2 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 1 mars 2010
1 mars 2010 à 22:31
Merci beaucoup ! Ce script marche à merveille, et résout mon problème =D
Je n'ai plus qu'a l'adapter !
Merci lespinx !
0
Rejoignez-nous