Bonjour,
J'ai besoin de comparer deux versions de logiciel.
Est ce qu'il existe sous Windev une fonction pour comparer deux variables de type texte
Par exemple si la version 1.5.36 et supérieure a la version 1.6.32
Merci de votre aide
Bonjour,
J'ai besoin de comparer deux versions de logiciel.
Est ce qu'il existe sous Windev une fonction pour comparer deux variables de type texte
Par exemple si la version 1.5.36 et supérieure a la version 1.6.32
Merci de votre aide
Bonjour,
regarde du côté de exeInfo(), pour les infos sur exe et dll.
Tu peux comparer 2 chaînes presque comme 2 nombres :EDIT : Sinon tu peux t'amuser avec ExtraitChaine().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 V1, V2 sont chaînes V1 = "1.5.46" V2 = "1.6.98" Si V1 > V2 alors info("V1") sinon Si V1 < V2 alors info("V2") sinon info("V1 = V2") fin fin
Attention quand même si tu as des numéros comme "1.5.46" et "1.5.105"
Logiquement, 1.5.105 est la plus récente, mais j'ai peur qu'une comparaison de chaine donne le résultat inverse. Parce que 1 arrive avant 4, et que l'outil de comparaison n'a strictement aucune raison de convertir tout ça en nombres avant de faire les comparaisons.
A vérifier quand même, on n'est pas à l'abri d'une bonne surprise.
Et du coup, si les numéros de sous-version peuvent dépasser 100, et si la comparaison standard donne le mauvais résultat, il va falloir passer par un traitement plus lourd, avec ExtraitChaine cmme proposé par Frenchsting.
Pour les sous-versions, tu as raison : 1.5.105 sera considéré comme inférieur à 1.5.56. Il compare caractère par caractère.
D'où mon ajout de référence à extraitchaine().
Bonjour,
ci-dessous ma petite méthode pour comparer des versions (jusqu'à 4 sous-versions)
A+
PROCÉDURE GLOBALE PJ_mfgVersionCompare(LOCAL sVersion est une chaîne, LOCAL sVersionRef est une chaîne)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 eEtatVersion est un entier t_eVersion, t_eVersionRef est un tableau de 4 entiers // pour comparer les versions 1.5.20.0 vs 1.4.38.0 par exemple TableauVersion(sVersion, t_eVersion) TableauVersion(sVersionRef, t_eVersionRef) eEtatVersion = 0 POUR c=1 À 4 SELON Vrai CAS t_eVersion[c]>t_eVersionRef[c] eEtatVersion=1 SORTIR CAS t_eVersion[c]<t_eVersionRef[c] eEtatVersion=-1 SORTIR AUTRE CAS //identique -> sera 0 si on parcourt tout FIN FIN RENVOYER eEtatVersion PROCÉDURE INTERNE TableauVersion(LOCAL sVersionChaine est une chaîne, addr_t_eTableau est un tableau de 4 entiers) c est un entier=0 sTemp est une chaîne sVersionChaine = Remplace(sVersionChaine, ",",".") VariableRAZ(addr_t_eTableau) BOUCLE c++ sTemp = ExtraitChaîne(sVersionChaine,c,".") SI sTemp=EOT ALORS SORTIR addr_t_eTableau[c] = Val(sTemp) FIN FIN
Pas mal ton code. Tu peux ajuster le nombre de sous-versions en utilisant des tableaux d'entiers.
et ta boucle de test devient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 POUR c = 1 _À_ chaineoccurrence(ChanineVersion, ".") + 1 tableauajoute(addr_t_eTableau, Val(ExtraitChaîne(sVersionChaine,c,"."))) FIN
Pas testé du tout, par contre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 POUR c=1 _À_ t_eVersionRef..occurrence ....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager