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

Vos contributions VB6 Discussion :

[Proposition] Update avantageux de la fonction "Convertir en octet" de la FAQ


Sujet :

Vos contributions VB6

  1. #1
    Membre actif Avatar de Jihnn
    Inscrit en
    décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 330
    Points : 272
    Points
    272
    Par défaut [Proposition] Update avantageux de la fonction "Convertir en octet" de la FAQ
    Bonjour à tous,

    En regardant la FAQ, je suis tombé sur cette fonction.

    Je me demandais s'il y avait moyen d'optimizer ce code, et c'est ce que j'ai tenté.
    Mes tests concluants, j'ai optimizé le code en une seule ligne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function O2T(ByVal Value As Double, _
                 ByVal Optional ValueType As Byte = 0, _
                 ByVal Optional ValueFinal As Byte = 2) As Double
      O2T = Value * 1024^(CInt(ValueType) - ValueFinal)
    End Function
    Évidemment, ceci n'est pas très explicite. Voici donc ce que j'ai fait :

    ----------

    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
     
    Function O2T(ByVal Value As Double, _
                 ByVal Optional ValueType As Byte = 0, _
                 ByVal Optional ValueFinal As Byte = 2) As Double
     
      ' Voici le tableau :
      'Nom 	    |o | Ko | Mo | Go | To | Po | Eo | Zo | Yo
      '    	    |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
      'Position |0 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08
     
      ' Voici la formule :
      ' Unite * 1024^(position_Unite - position_finale) = Unite_converti
     
      ' Exemple :
      ' Mo -> Go
      ' 1024 (Mo) * 1024^(2-3) = 1
     
      O2T = Value * 1024^(CInt(ValueType) - ValueFinal)
    End Function
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox O2T(FileLen("C:\Fichier.txt", 0, 1))

    J'attends impatiemment vos opinions,

    Thunder

  2. #2
    Inactif   Avatar de jmfmarques
    Profil pro
    Inscrit en
    décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2005
    Messages : 3 784
    Points : 4 545
    Points
    4 545
    Par défaut
    Bonjour Thunder,

    Ne sois pas trop impatient.

    Attends Lundi, que je mette en route une vieille machine "underclockée" qui ne me sert qu'à faire des tests.

    Je te dirai ensuite .

    Je ne suis en effet pas certain qu'une variable de plus en mémoire et un appel récursif de fonction aillent plus vite qu'une petite boucle While ....

    Alors : un test sur un million d'opérations, chronomètre en route, avec l'une des 2 méthodes, puis l'autre.... et jugement éclairé

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 19 871
    Points
    19 871
    Par défaut
    bonjour jmf ..
    (pas reveillé..? )

    il n'y as pas d'opération récursive.. dans le code à ThunderStroke ...

    mais bon il n'est pas fini ... son exemple ne fonctionne pas ..les parenthéses sont mal placées...

    puis pour ma par avec mon VBA, j'ai pas pu faire fonctionner cette fonction .. je passe en débordement de capacitée... je suis pas sur que ThunderStroke à l'heure tardive (ou matinale) ou il as posté ce code ait eu le temps de testé... ou alors il à utilisé un petit fichier ... ..

  4. #4
    Inactif   Avatar de jmfmarques
    Profil pro
    Inscrit en
    décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2005
    Messages : 3 784
    Points : 4 545
    Points
    4 545
    Par défaut
    Bonjour Bbil,

    Tu as raison : pas de récursivité et je suis mal réveillé...
    Reste qu'il y a une variable de plus en mémoire.

    Je n'ai encore rien testé, mais verrai celà lundi.... promis

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 19 871
    Points
    19 871
    Par défaut
    pour ce qui est du dépassement de capacité ... sous VBA... (j'ai pas testé en VB6) .. une opération sur 2 byte donne un byte ... dans le cas présent la soustraction, si le résultat est négatif.. on est hors borne un byte pouvant prendre les valeurs de 0 à 255 ... il suffit de changer le type d'un des deux opérateur de l'opération ... pour corriger le probléme..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       O2T = Value * 1024 ^ (CInt(ValueType) - ValueFinal)
    Merci de me dire si c'est la même chose en VB6...

  6. #6
    Membre actif Avatar de Jihnn
    Inscrit en
    décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 330
    Points : 272
    Points
    272
    Par défaut
    Désolé bbil, tu as raison, je l'avais corrigé lors de mes tests et non dans le fichier où j'écrivais

    Mais la formule marche très bien.

  7. #7
    Membre actif Avatar de Jihnn
    Inscrit en
    décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 330
    Points : 272
    Points
    272
    Par défaut
    Bonjour,

    Je me demandais si tu ne m'avais pas, par hasard, un peu oublié jmfmarques ^^

    Merci d'avance,

    Thunder

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 19 871
    Points
    19 871
    Par défaut
    tu pourrai editer ton code (pour cela utilise le bouton afin d'éviter les problémes de débordements...

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : mai 2005
    Messages : 4 235
    Points : 24 287
    Points
    24 287
    Par défaut
    Citation Envoyé par bbil
    tu pourrai editer ton code (pour cela utilise le bouton afin d'éviter les problémes de débordements...
    Je m'en suis chargé
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Inactif   Avatar de jmfmarques
    Profil pro
    Inscrit en
    décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2005
    Messages : 3 784
    Points : 4 545
    Points
    4 545
    Par défaut
    Bonjour,

    Test faits ce matin .

    Performances identiques. Tout va donc bien.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/12/2007, 15h02
  2. [C#] Fonction pour convertir string[] vers ArrayList
    Par luimême dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/04/2005, 13h25
  3. [Fonction Oracle] Convertir des secondes en heure
    Par falcon dans le forum Oracle
    Réponses: 12
    Dernier message: 18/11/2004, 11h56

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