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 :

Transformer une chaine de caractere en un nom de variable


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 41
    Points : 29
    Points
    29
    Par défaut Transformer une chaine de caractere en un nom de variable
    Bonjour,

    Sous delphi
    pour rechercher un composant on utilise findcomposant("CHAINE")
    je voudrais la meme chose pour une variable.
    -------------------------------------------------------------------------
    Description
    var
    test:string;
    ma_variable;

    test := 'hello';
    ma_variable = 'test';

    ce que je voudrais faire
    showmessage(ma_variable); et affiche HELLO
    ------------------------------------------------------------------------
    Sous Javascript
    EVAL('CHAINE')
    ------------------------------------------------------------------------
    Sous PHP
    $test = "hello";
    $ma_variable = "test";

    print $$ma_variable;
    ou print ${$ma_variable};

  2. #2
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    je ne suis pas sûr que ça soit possible ... (mais bon je ne suis pas sûr du contraire non plus).
    Bon ok, je sais, je t'aide pas beaucoup, là, désolé.

  3. #3
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Bonjour, merci d'utiliser la balise code.

    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
     
    Posté le: Mar Fév 28, 2006 12:27    Sujet du message: Transformer une chaine de caractere en un nom de variable   
     
    --------------------------------------------------------------------------------
     
    Bonjour, 
     
    Sous delphi 
    pour rechercher un composant on utilise findcomposant("CHAINE") 
    je voudrais la meme chose pour une variable. 
    ------------------------------------------------------------------------- 
    Description 
    var 
    test:string; 
    ma_variable : pointer of string;
     
    test := 'hello'; 
    ma_variable = @test; 
     
    showmessage(pchar(ma_variable^); // Affichera 'Hello'.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    Merci pour la réponse

    mais le souci c'est

    que quand je mets
    c'est ma chaine de caractère qui va devenir ma variable

    Donc je ne peux pas utiliser

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Points : 42
    Points
    42
    Par défaut
    bon a priori, t grille.
    je m explique :
    je ne suis pas expert dans les details du compilateur delphi, mais en general un compilateur a au moins deux modes, un pour le debug ou il laisse les noms de variables dans l'exe, et un mode release (avec optimisation de code etc) et la, il n'y a pas le nom des variables dans l exe.

    pour ton affaire, tu peux essayer au lieu d utiliser le nom des variables, d'utiliser leurs adresses

    ce qui donne a peu pres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ma_variable: pointer;
    ma_variable := @test;
    showmessage(ma_variable^);
    mais tu ne peux pas recuperer la valeur d une variable en tapant son nom a l execution, tout simplement parce qu une variable n a pas de nom, seulement une adresse. (le nom, c'est pratique pour le programmeur, mais l ordi s en fout, lui)

    bon voila, j espere
    1- que je me suis pas trompe
    2- que c assez clair
    3- que ca peut te servir un peu

    tcho

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    On peut faire quelques choses de similaires

    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
     
    var
     
     lst : TStringList;
     Ma_Variable : String;
    begin
      lst := TStringList.Create;
      try  
        lst.Add('Test=Hello');
        Ma_variable := 'Test';
        Showmessage(lst.values[Ma_Variable]);
      finally
        lst.free;
      end;
    end;

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    C'est éventuellement imaginable soit de la façon dont a expliquée Malatar, soit avec des propriété publiées et les RTTI.

    Ca pourrait donner qqch comme ça :
    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
    type
      TVarParNom = class
      private
        FVariable : string;
        FAutreVar : string;
      published // et non public !
        property Variable : string read FVariable write FVariable;
        property AutreVar : string read FAutreVar write FAutreVar;
      end;
     
    implementation
     
    procedure UneProc(NomVar : string);
    var VarParNom : TVarParNom;
    begin
      VarParNom := TVarParNom.Create;
      VarParNom.Variable := 'Hello';
      VarParNom.AutreVar := 'Au revoir';
      if VarParNom.IsPublishedProp(NomVar) then
        ShowMessage(VarToStr(VarParNom.GetPublishedProp(NomVar)))
      else
        ShowMessage('La variable '+NomVar+' n''existe pas.');
      VarParNom.Free;
    end;

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Points : 42
    Points
    42
    Par défaut
    oui bon c vrai qu avec une classe ca ressemble plus a du delphi que mon code C-like

    mais voila qui souleve une autre interrogation:
    published // et non public !
    la difference ? je n ai jamais rencontre de cas ou ca change grand chose, a part qu on ne peut pas surcharger dans les published, je crois... et laide delphi est pas tres explicite.

  9. #9
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    published sert à indiquer quelle propriété ancêtre on veut rendre disponible par l'héritage.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Points : 42
    Points
    42
    Par défaut
    mouais... les publiques aussi sont disponible.......

    menfin, c'st pas grave.
    merci
    et bonne chance dimdidi

  11. #11
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Comme il a été répondu les principes du compilateur ne permettent pas de récupérer à partir du nom de variable son adresses, son type ou son contenu.

    Par contre, on peut l'imaginer pour des class internes à condition que tous héritent d'une propriété "Name", d'une méthode "VarToStr" commune et, lors du Create des objects, un stockage des "Name" dans une liste comme Malatar l'a proposé

  12. #12
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Caine
    published sert à indiquer quelle propriété ancêtre on veut rendre disponible par l'héritage.

    Ça vient de ma doc Delphi 7 (désolé elle est en anglais):

    Published members have the same visibility as public members. The difference is that runtime type information (RTTI) is generated for published members. RTTI allows an application to query the fields and properties of an object dynamically and to locate its methods. RTTI is used to access the values of properties when saving and loading form files, to display properties in the Object Inspector, and to associate specific methods (called event handlers) with specific properties (called events).
    En résumé, Published c'est exactement la même portée que Public à l'exception que les propriétés Published seront disponibles dans l'inspecteur d'objets. Les propriétés de type méthodes vont apparaîtrent sous l'onglet événements.

    Les champs disponibles par héritages sont tous les champs sous les portées Protected, Published et Public.

    Je me trompe peut-être, remarquez

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Points : 42
    Points
    42
    Par défaut
    ca, ca colle plus avec ce que j avais pense de prime abord..

  14. #14
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 41
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Merci à tous pour les reponses et aussi rapidement.

    Je pense que je vais utiliser la methode avec une classes de sjrd

  15. #15
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    SlimJoe tu as tout à fait raison.

    Et on remercie les traducteurs...

    C'est ce que j'ai failli répondre. Pour être précis et complet je suis allé voir la doc (hélas en Fr). Et elle est loin d'être aussi claire que l'extrait que tu en as donné.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2009, 13h37
  2. transformer une chaine de caractere en liste
    Par neo666 dans le forum Caml
    Réponses: 17
    Dernier message: 26/08/2008, 15h57
  3. Réponses: 1
    Dernier message: 13/06/2007, 13h14
  4. transformer une chaine de caracteres en image
    Par jsunnyduckk dans le forum 2D
    Réponses: 7
    Dernier message: 16/02/2007, 14h51
  5. transformer une chaine de caracteres en du code
    Par giova_fr dans le forum C++
    Réponses: 6
    Dernier message: 15/01/2006, 16h37

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