Test sur le "format" d'une chaine de caractères [Résolu]

Messages postés
2
Date d'inscription
dimanche 10 février 2008
Dernière intervention
1 mars 2010
- 27 févr. 2010 à 01:41 - Dernière réponse :
Messages postés
2
Date d'inscription
dimanche 10 février 2008
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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
96
Date d'inscription
lundi 9 octobre 2006
Dernière intervention
24 février 2018
- 1 mars 2010 à 22:20
3
Merci
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.

Merci lespinx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de lespinx
Messages postés
2
Date d'inscription
dimanche 10 février 2008
Dernière intervention
1 mars 2010
- 1 mars 2010 à 22:31
0
Merci
Merci beaucoup ! Ce script marche à merveille, et résout mon problème =D
Je n'ai plus qu'a l'adapter !
Merci lespinx !
Commenter la réponse de arkwonn

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.