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

Langage Delphi Discussion :

Problème avec la fonction Val()


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut Problème avec la fonction Val()
    Bonjour,

    J'ai un soucis avec la fonction val.
    J'ai de nombreux endroits où je dois déterminer si une chaine de caractère est un nombre ou une vrai chaine, et si c'est un nombre, je dois la convertir.
    J'utilisais donc jusqu'à présent la fonction Val().

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Val(Chaine, Entier, Erreur);
    if Erreur = 0 then
      //Traitement de la valeur "entier"
    else
     //Traitement de la valeur "chaine"
    Le problème est qu'un des utilisateurs vient d'utiliser une chaine nommée "XC" et que la fonction Val me renvoie 0 comme code erreur et 12 dans le variable "entier".
    Après recherche, je me suis rendu compte que "X" est le préfixe pour les nombres hexadécimaux. Et que du coup, il considère "XC" comme la valeur 12 en hexadécimal.
    J'ai 2000 endroits où la fonction Val est appelée...
    Plutôt que de redéfinir une nouvelle fonction Val et de le changer partout, n'y aurait-il pas un moyen de désactiver le préfixe Hexa dans la fonction Val ?
    Par exemple avec une directive de compilation ?

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Une possibilité pourrait être de redéfinir localement une procédure Val de même prototype, capable de faire le test et appel si besoin à l'originale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure Val(Chaine: string; Entier, Erreur: integer);
    begin
      if (length(Chaine)>0)
      and (UpKey(Chaine[1])='X')
      then Erreur:=-1 // par exemple
      else System.Val(Chaine, Entier, Erreur); // si dans l'unité System
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Merci, j'y avais pensé, mais malheureusement, mes appels à la fonction val sont disséminés dans des centaines de fichiers. Cela m'obligerait à redéfinir localement la fonction dans chacun des fichiers. (Je travaille sur un source de quasiment 1 millions de lignes...).
    Merci quand même.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    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 086
    Par défaut


    Val, c'est un peu brutale !
    Depuis D5\D6, il y avait les variantes comme TryStrToInt ou TryStrToFloat
    Cela aurait été plus élégant de créer une fonction IsNumeric ou IsAlpha, juste pour simplifier la lecture du code, tu aurais ainsi éviter ce désagrément aujourd'hui !

    TryStrToInt utilise x, 0x, 0X et $ aussi en plus de X
    Hors TryStrToInt est une simple encapsulation de Val()
    Cela va faire beaucoup de cas à gérer !
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Merci.
    Bon, ben je suis bon pour me faire une fonction Val non hexa qui teste avant et à faire un remplacement partout...

Discussions similaires

  1. Problème avec la fonction Val
    Par yannoch123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/06/2013, 15h47
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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