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
Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.
Sur internet, tout est vrai ! Honoré de Balzac
Make it real not fantasy... Herman Rarebell
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.
N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.
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().
Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.
Sur internet, tout est vrai ! Honoré de Balzac
Make it real not fantasy... Herman Rarebell
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 ....
Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.
Sur internet, tout est vrai ! Honoré de Balzac
Make it real not fantasy... Herman Rarebell
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