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 :

[Delphi 7] Savoir si une valeur est assignée à une variable


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Par défaut [Delphi 7] Savoir si une valeur est assignée à une variable
    Bon c'est sans doute une question stupide, mais j'avoue que je bloque un peu.

    Dans le principe, je créer des variables de type single que je ne peux pas initialiser. Avant de les utiliser (dans des comparaisons), je souhaite savoir si je leur ai déjà assigner une valeur, ou leur donner celles de la comparaison dans le cas contraire.

    En simplifiant à l'extrême :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Si A existe alors 
      Si B>A alors A = B; (FinSi)
    Sinon A = B;

    Je pensais utiliser la fonction assigned et j'ai donc écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not assigned(@Xmin) then
    Or je m'aperçois que dès la création, la valeur 0 est attribuée à mes variables.
    Une solution ?

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    En delphi,

    dès lors que tu déclares une variables non pointeur, elle est allouée, et donc la 'case mémoire' allouée contient une valeur... qui est ta valeur initiale.

    Pour les types entiers, la valeur initiale est 0 théoriquement
    pour les booléens, c'est false (0 en num...)
    les chaines sont vides.

    Par méfiances peut-être ou par habitude, j'initialise tout le temps mes variables...

    Il n'y a pas de notion 'non-affecté', car la var. est déjà allouée.

    Par contre pour un pointeur (ou Objet), le pointeur est effectivement alloué et s'il vaut 0, c'est à dire Nil, il ne pointe sur rien du tout, autrement dit, là, on peut dire qu'il n'est pas initialisé.

    Donc dans ton cas, si tu veux absolument avoir un notion de 'non assigné', si la valeur 0 symbolise réellement une donnée et non une absence de données, il faut faire (mais c'est un peu lourd)

    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
    var
      PA: ^Integer;
      B : Integer;
    begin
      // Initiliser quelque part même si théoriquement c'est déjà le cas
      PA := nil;
    .....
     
      // ensuite tu peux faire ton code comme ca
      if   Assigned( PA ) then
        if B > PA^ then PA^ := B else
      else begin
        New( PA );
        PA^ := B;
      end
    ...
     
      // Pour dé-assigner A normalement il faut faire 
      Dispose( PA ); // libération de la mém.
      PA := Nil; // sinon, la mém est désallouée, mais le contenu du pointeur reste le même
      // pour les objets, FreeAndNil( Object) fait les 2 ene même temps
    end;
    Un peu lourd non ? sinon il faut trouver une autre méthode pour ton code.

    Peut-être en utilisant les variants... à creuser également.

    Bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre confirmé Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Par défaut
    Je craignais cette réponse

    J'ai envisagé deux solutions pour contourner le problème, la première en initialisant ma variable à Pi, et la seconde en passant par une création de fichier (je créer déjà de nombreux fichiers). Finallement créer un pointeur n'est guère plus lourd que les methodes au dessus

    Merci pour l'aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Savoir si une valeur est dans une zone de liste
    Par vincent1746 dans le forum IHM
    Réponses: 2
    Dernier message: 16/07/2010, 16h07
  2. [DATA] Vérifier si une valeur est dans une table sans PROC SQL
    Par Filippo dans le forum SAS Base
    Réponses: 5
    Dernier message: 02/12/2009, 11h05
  3. Macro qui vérifie qu'une valeur est dans une table
    Par Filippo dans le forum Macro
    Réponses: 2
    Dernier message: 23/11/2009, 09h57
  4. Vérifier qu'une valeur est conforme à une table repère
    Par lylau dans le forum Développement de jobs
    Réponses: 10
    Dernier message: 17/04/2009, 11h20
  5. savoir si une valeur est dans une table
    Par pedro99 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 06/06/2008, 09h44

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