Page 1 sur 1

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

Posté : sam. 11 déc. 2010 23:52
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.

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

Posté : dim. 12 déc. 2010 00:54
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.

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

Posté : dim. 12 déc. 2010 12:53
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

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

Posté : dim. 12 déc. 2010 13:03
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!!!

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

Posté : dim. 12 déc. 2010 13:08
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

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

Posté : dim. 12 déc. 2010 16:36
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

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

Posté : mar. 14 déc. 2010 01:47
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

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

Posté : mar. 14 déc. 2010 11:31
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

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

Posté : mar. 14 déc. 2010 13:38
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

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

Posté : mar. 14 déc. 2010 14:18
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.

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

Posté : mar. 14 déc. 2010 18:27
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