[R] Demande de Pattern de Ctrl de Version (stringregexp)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
NDTC
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 25 juin 2008 10:02
Localisation : IDF
Status : Hors ligne

[R] Demande de Pattern de Ctrl de Version (stringregexp)

#1

Message par NDTC »

Bonjour à tous,

J'ai besoin d'un petit coup de main car la ça me dépasse... :(

J'ai desoin de contrôler si une chaine de caractère corréspond bien à un numéro de version de type "1.0.0.0" (que du numérique).
Sachant qu'il pourais y avoir plus qu'un seul chiffre entre chaque point sépérateur (ex: 1.13.0.2, 10.0.22.234).

Cette fonction doit symplement être "0" si non correspondant, ou "1" si correspondant au format.

J'ai bien trouvé la fonction "stringregexp", mais je n'y comprend rien...

Merci pour votre aide,
Cdlt.
Modifié en dernier par NDTC le dim. 12 déc. 2010 13:04, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de Pattern de Ctrl de Version (stringregexp)

#2

Message par Tlem »

Je ne suis pas fortiche en RegExp, mais voici ce que j'ai trouvé :
► Afficher le texte
En considérant que le nombre de chiffres max pour un groupe est de 3 et qu'il ne doit jamais y avoir autre chose que des chiffres.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Demande de Pattern de Ctrl de Version (stringregexp)

#3

Message par legend »

Trés facile a faire.
exemple :

Code : Tout sélectionner

$v1 = 1.0.0.0
$v2 = 2.1.2.0
$s1 = stringsplit ($v1, ".") ;retourne 4 numero sous forme d'array qui sont (1, 0, 0, 0)
$s2 = stringsplit ($v2, ".")
for $i = 1 to $s1[0] ; $1[0] => nombre de .
if $s1[$i] = $s2[$i] then
; action que tu veux faire.
endif
next
j'espére que sa t'a aidé.
bonne journée
Avatar du membre
NDTC
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 25 juin 2008 10:02
Localisation : IDF
Status : Hors ligne

Re: [..] Demande de Pattern de Ctrl de Version (stringregexp)

#4

Message par NDTC »

EXELLENT!!!

Merci Tlem!!!

Ca marche exactement comme je le souhaite...
Mais j'ai modifié la chaine de controle comme suit pour supprimer la limitation à 3 caractère:
StringRegExp ( $aValue, '(\d{1,}\.\d{1,}\.\d{1,}\.\d{1,}?$)', 0)

Encore Merci...

Problème résolu!!!
Avatar du membre
NDTC
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 25 juin 2008 10:02
Localisation : IDF
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#5

Message par NDTC »

Merci Legende,

Ce que tu me propose est, si j'ai bien compris, un controle de Numéro de version, et non de format de chaine de caractère...

Cordialement,
Thom
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#6

Message par legend »

Rah, j'ai encore donné une mauvaise réponse.
Je suis vraiment désolé.
Bon voici l'exemple qui permet de le faire. (j'espére que ce serais la bonne réponse^^)

Code : Tout sélectionner

$1 = "10.d2.1.0"
$2 = StringReplace ($1, ".", "")
$0 = @extended
if $0 <> 0 Then
    $3 = StringIsInt ($2)
    if $3 = 1 then msgbox (0, "", "Le string est un numero de version")
    EndIf
Avatar du membre
NDTC
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 25 juin 2008 10:02
Localisation : IDF
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#7

Message par NDTC »

Pas de problème Legende... 8)
C'etait sympa de ta part, et ca partait d'une bonne intension...

En effet, cette seconde fonction rempli bien ce que j'attendais, comme quoi pourquoi chercher à faire compliqué quand il y a des solutions simples!!!
J'ai en outre opté pour l'autre methode, j'avais besoin d'un truc fonctionnel ce matin... ;)
Bonne continuation, et encore merci,
Thom
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#8

Message par Iste »

Heu, et pour faire moins crade avec une regexp, vous pouvez essayer cela :

Code : Tout sélectionner

^([0-9]+(.[0-9]+)*)$
Ne prend que des nombre, autant de point que vous voulez, il faut juste qu'ils soient suivis par d'autre nombre

ex :

Code : Tout sélectionner

$v1 = "10.5.66.8"
$v2 = "1.5.66.8"
$v3 = "10.2.66."
$v4 = ".2.66.8"
$v5 = "10.a.66.8"

$pattern = "^([0-9]+(.[0-9]+)*)$"

MsgBox(0,"",$v1 & " : " & StringRegExp($v1,$pattern))
MsgBox(0,"",$v2 & " : " & StringRegExp($v2,$pattern))
MsgBox(0,"",$v3& " : " & StringRegExp($v3,$pattern))
MsgBox(0,"",$v4 & " : " & StringRegExp($v4,$pattern))
MsgBox(0,"",$v5 & " : " & StringRegExp($v5,$pattern))
Les problèmes du code de legend :
"5" ou "11" ne sera pas matché (@extended n'est vraiment pas utile)
".5.2.6" ou "6.5.11." seront matché
"............0.......5.......6......." sera aussi un numéro de version valide
Signez ici
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#9

Message par legend »

Bien, le @extented c'etait pour voir s'il y avais des points.
Je n'ai jamais vu une version sous la forme "500154" ou sous la forme "1.......254.......1"
Enfin c'est l'exemple qu'il avait donné :)
Aussi sa marche sur plusieurs points, parce que sa remplacera tout les points et le nombre retourné sera un INT.
Bonne journée
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#10

Message par Iste »

Une version de type "500154" est en effet rare, mais, selon moi, une version de type "2" est valide. C'est pour ca que je trouve l'utilisation du @extented abusive dans ce cas.
Et une version de type "1.......254.......1" est en effet pas valide, c'est pour cela que ma regexp ne la valide pas.

La demande initiale étant de vérifier la syntaxe de numéro de version, il est judicieux de tester tous les cas et de ne pas en laisser passer.

J'ai bien remarqué en lisant votre code qu'il laisserai passer des cas. C'est une approche légère du problème qui ne répond pas totalement a la question. C'est pour cela que j'ai pris le temps de faire cette petite regexp affin de donner une solution plus complète.
Signez ici
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [R] Demande de Pattern de Ctrl de Version (stringregexp)

#11

Message par legend »

Ouais, t'a bien fait pour cela.
Mais bon, si je savais toutes les formes d'une version j'aurais pu le faire ^^
Bonne journée a vous
Répondre