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

Contribuez Discussion :

Représentation d'une valeur numérique dans une base quelconque


Sujet :

Contribuez

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Représentation d'une valeur numérique dans une base quelconque
    Bonjour,

    J'avais besoin de représenter une valeur numérique en base 32.

    Voici la fonction que j'utilise.
    Elle permet de représenter une valeur numérique dans une base comprise entre 2 et 36, en utilisant l'alphabet complet.
    Elle retourne une chaîne de caractères.
    Il est possible de spécifier une taille minimale pour le résultat (paramètre nTailleMin) ainsi que le caractère à utiliser pour compléter la représentation (paramètre sCar)

    Cette fonction est utile pour cibler une base plutôt "exotique".
    Pour une base octale ou hexadécimale, il est sans doute plus efficace d'utiliser la fonction NumériqueVersChaîne().

    Exemples d'utilisation:
    sChaîne = ReprésentationBaseN(25,2,8) // Affecte "00011001" à sChaîne (binaire, sur 8 caractères)
    sChaîne = ReprésentationBaseN(255,8) // Affecte "377" à sChaîne (octal)

    Code wlangage : 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
    //
    // Représentation d'une valeur numérique entière dans une base quelconque,
    // retourne une chaîne
    //
    FONCTION ReprésentationBaseN(nValeur est un entier sur 8 octets, nBase est un entier, nTailleMin est un entier=0, sCar est une chaîne="0")	//chaîne
     
    sReprésentation est une chaîne = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"	// max base 36
    sConv est une chaîne
    nReste est un entier
    nNombre est un numérique = nValeur
    sRésultat est une chaîne
     
    SI nBase = 2 A Taille(sReprésentation) ALORS
     
        BOUCLE
            nReste = nNombre modulo nBase // calcul du chiffre de droite
            sRésultat = sReprésentation[[nReste+1]] + sResultat // trouve la représentation du chiffre et la concatène
            nNombre = (nNombre - nReste) / nBase // calcul du nombre qu'il reste à représenter à gauche
        A FAIRE TANTQUE nNombre>0
     
        SI Taille(sRésultat) < nTailleMin ALORS // Si l'utilisateur a demandé à formater le résultat sur un minimum de caractères
            sRésultat = Droite(Répète(sCar,nTailleMin)+sResultat, nTailleMin) // Compléter à gauche avec un ou plusieurs caractères de remplissage
        FIN
     
        RENVOYER sRésultat 
     
    SINON
    	RENVOYER = ""
    FIN

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Sans vouloir être rabat-joie, je n'ai pas besoin d'une variable de type source de données pour stocker une chaine construite dynamiquement. Le type chaine existe déjà pour ça.

    C'est exactement ce que je voulais pointer du doigt : variable chaine = variable source de données.

    Et je persiste, proposer un type spécifique qui n'a a aucune valeur ajoutée et qui peut laisser penser que les règles de portée s'appliquent est nuisible. Si l'aide précise qu'une source de données est nécessairement globale, pourquoi permettre sa déclaration dans un bloc local ?

    L'astuce proposée ne fait que montrer en quoi le type de source de données est un type chaine déguisé.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Ce n'est pas dans l'aide que je l'avais vu mais dans une réponse sur ce même sujet.

    Je voulais la retrouver pour voir si j'avais bien lu mais le sujet a été amputé d'une bonne partie des réponses (sans prévenir).

    Il me semblait que quelqu'un disait qu'une source de données était toujours globale.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Pour ceux qui n'auraient pas suivi le "mouvement", le message a l'origine de cette discussion à été déplacé dans le sous-forum Contribuez.
    http://www.developpez.net/forums/d92...ource-donnees/


    Pour résumer ma réponse détaillée plus loin:
    _ Le type Source de Données apporte des facilités syntaxiques et une libération automatique des ressources,
    _ Il n'apporte pas de solution au besoin d'isoler une source de données dans son propre "espace de nom".


    A mon avis, le type avancé Source de Données n'est pas sans intérêt...

    Peut-être qu'à l'usage ce type n'apporte pas de nouvelles fonctionnalités, puisqu'on peut arriver aux mêmes résultats en utilisant le mot-clé Externe, les indirections et les déclarations basées sur des chaînes de caractères... (mais franchement, pour un nouveau venu, ça fait "bricolage")

    En revanche, c'est une avancée au plan syntaxique.
    C'est aussi une facilité pour les développeurs venus d'autres horizons habitués à manipuler des "jeux de données" (et qui n'auront pas à bricoler les indirections etc.).
    Ce qui est intéressant c'est la libération automatique des ressources (globales ) associées à une variable Source de Données quand cette variable est détruite.

    Maintenant, la subtilité est dans la mise en oeuvre de ce type avec le moteur de bases de données HyperFile, et notamment le problème local / global

    Tout ce qui est déclaré dans un contexte HyperFile est global à ce contexte.
    Donc, un nom logique est toujours global qu'il soit associé à une variable Source de Données locale ou globale.
    Mais tu as le même problème quand tu déclares des sources de données au moyen de chaînes de caractères.
    Voilà, il faut savoir comment fonctionne HyperFile. C'est vrai que cela peut devenir un piège.

    Maintenant, il reste la possibilité d'utiliser différents contextes HyperFile, ce qui peut contribuer à lever les risques de conflits de nom logique HyperFile.
    _

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Lo² Voir le message

    Je ne vois pas dans l'aide que la source doit être globale.
    Il est dit que si elle est déclarée en globale, elle sera accessible par tous les traitements utilisant le même contexte HF.
    En fait, il existe une contradiction.
    Dans l'aide en ligne de WD12, cette nuance de "déclaration globale" n'est pas exprimée.

    Une source de données est globale à tous les traitements du projet.
    Alors que dans l'aide en ligne sur le web il est dit:

    Une source de données déclarée en globale est globale à tous les traitements du projet qui utilisent le contexte HyperFileSQL correspondant à celui où la source de données a été déclarée.
    Je trouve que tout cela est confus...
    Quand on parle de source de données, de quoi s'agit-il ? d'une variable ? d'un "fichier" HyperFile ?

    Pour ma part, j'utiliserai les expressions suivantes:
    _ "Variable Source de Données",
    _ "Jeu de données HyperFile" ou encore "Fichier HyperFile"

    Une variable Source de Données est soumise aux mêmes règles de portée et durée de vie que n'importe quelle variable WLangage.
    Une variable Source de Données est en relation avec un contexte HyperFile:
    _ elle est associée à un Jeu de données (ou "fichier" HyperFile) qui est désigné par un nom logique.
    Du côté du contexte HyperFile, la règle est qu'un nom logique est global.
    _

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2011, 10h40
  2. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  3. récupérer une valeur numérique dans une chaine
    Par EFFLYINGJOKER dans le forum Développement
    Réponses: 2
    Dernier message: 30/03/2010, 16h26
  4. [Débutant] Validation d'une valeur numérique dans une variable String
    Par anto84 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 11/07/2007, 10h26
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

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