IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Comparer des versions de logiciel


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2004
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par d�faut Comparer des versions de logiciel
    Bonjour a tous,

    Je voudrais savoir comment comparer la version de deux logiciels pour savoir lequel est le plus r�cent.

    Je m'explique, j'ai une fonction dans mon programme qui me donne la version du logiciel en cours d'utilisation (FAQ : Comment obtenir les informations de version d'une application ?) sous la forme d'un AnsiString.
    Et ce code va �galement r�cup�rer dans une BDD la version du logiciel pouvant utiliser cette BDD. Ceci �galement sous la forme d'un AnsiString.

    Pour comparer les diff�rentes version je comparais simplement les deux variables AnsiString pour voir si il y avait une diff�rence.
    Or j'aimerais am�liorer se syst�me et pouvoir dire si la version du logiciel inscrite dans la BDD est sup�rieure ou inf�rieure � la version du logiciel en cours.

    Pas facile � expliquer mais j'esp�re avoir �t� clair.

    Je ne met pas tout le code avec lequel je r�cup�re les diff�rentes version car ce code fonction. Petit exemple de comparaison possible :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    AnsiString asVersionLogiciel;
    AnsiString asVersionBDD;
    ....
    asVersionLogiciel = "1.0.2.0";
    asVersionBDD = "1.1.0.0";
    L� j'aimerais que le code me dise que asVersionBDD est sup�rieur � asVersionLogiciel

    Merci d'avance � tous

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Salut, pour effectuer cette t�che je me suis cod� une petite classe. Voici son prototype:
    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
    class TVersion
    {
    public:
        // Constructeur
        __fastcall TVersion();
        __fastcall TVersion(const AnsiString& Src);
        __fastcall TVersion(unsigned int Major, unsigned int Minor, unsigned int Release = 0, unsigned int Revision = 0);
     
        // Destructeur
        __fastcall ~TVersion() = {};
     
        // Assignation
        TVersion& __fastcall operator =(const TVersion& rhs);
     
        // Comparaison
        bool __fastcall operator ==(const TVersion& rhs) const;
        bool __fastcall operator !=(const TVersion& rhs) const;
        bool __fastcall operator < (const TVersion& rhs) const;
        bool __fastcall operator > (const TVersion& rhs) const;
        bool __fastcall operator <=(const TVersion& rhs) const;
        bool __fastcall operator >=(const TVersion& rhs) const;
     
        unsigned int Major;
        unsigned int Minor;
        unsigned int Release;
        unsigned int Revision;
    };
    �tant donn� que je sers de ce code dans une application commerciale, je ne peux pas te donner les d�tails du code. Par contre, tu vas comprendre que c'est pas trop compliqu� � coder.

    Une classe te permettra de faire des trucs du genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
     if(TVersion("3.5.4.98") > TVersion(4, 6))
     {
        TVersion LVers;
        LVers.Major = 5;
        LVers.Minor = 4;
        // On fait quelque chose avec LVers
     }
    J'esp�re t'avoir aid�.

  3. #3
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    un sujet Delphi qui peut servir : Comme trier des nombres avec des points entre nombres.
    j'avais fourni ma CompareVersion

    Sinon d'un point de vue Alphab�tique "1.0.2.0" est inf�rieur � 1.1.0.0"
    l'op�rateur < ou la fonction CompareText

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    if (asVersionBDD < asVersionLogiciel)
    {
      MigrationBDD(asVersionLogiciel);
    }
    Le probl�me de comparaison serait plut�t pour "1.0.11.0" et 1.1.0.0"

    tu peux aussi tricher en jouant sur les variables
    c'est ce que je fais pour le projet que je maintiens en mettant syst�matiquement sur deux chiffres, la comparaisons chaine fonctionne sans soucis

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    asVersionLogiciel = "01000200"; // ou 01.00.02.00
    asVersionBDD = "01010000"; // ou 01.01.00.00
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    asVersionLogiciel = "01001100"; // ou 01.00.11.00
    asVersionBDD = "01010000"; // ou 01.01.00.00
    tu peux tricher encore autrement avec la fonction inet_addr, cela converti une chaine de la forme a.b.c.d de "0.0.0.0" � "255.255.255.255" en un entier long que tu peux comparer tout simplement par la suite !
    Oui c'est une utilisation tr�s d�tourn� de inet_addr mais une version et une IP ont souvent la m�me forme, et peu monte � plus de 255 (� part chez MS ou chez Embarcadero avec leur 16.0.4429.46931

    A savoir que TDBXBaseMetaDataReader.MakeStandardVersionFormat contient ce genre de manip, dommage qu'Embarcadero n'a pas l'intelligence de mettre leur fonction en commun, il d�veloppe (et re-d�veloppe) des fonctions internes � leur classe parfois fort utile !
    Aide via F1 - FAQ - Guide du d�veloppeur Delphi devant un probl�me - Pensez-y !
    Attention Troll M�chant !
    "Quand un homme a faim, mieux vaut lui apprendre � p�cher que de lui donner un poisson" Confucius
    Mieux vaut se taire et para�tre idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la m�diocrit� !

    L'exp�rience, c'est le nom que chacun donne � ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre confirm�
    Inscrit en
    Octobre 2004
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par d�faut
    merci beaucoup de vos r�ponses.

    Je vais �tudier tout cela. Je dois juste convertir le code pour BuilderC++.
    Merci en tout cas, je vous tiens au courant.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 11/05/2010, 18h52
  2. Comparer des num�ros de version
    Par Ggamer dans le forum G�n�ral Python
    R�ponses: 6
    Dernier message: 07/08/2009, 21h19
  3. [CLI] Comparer 2 r�pertoires dans des versions diff�rentes
    Par Empty_body dans le forum CVS
    R�ponses: 1
    Dernier message: 24/11/2008, 13h55
  4. Mettre des versions sur un logiciel !
    Par Pharma dans le forum Delphi
    R�ponses: 7
    Dernier message: 18/10/2006, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo