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 :

Type "set" et variable "set of" en string ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Par défaut Type "set" et variable "set of" en string ?
    Bjr

    j'aimerais pouvoir convertir des types énumérés ainsi que des variables de type ensemble en chaîne

    Bref si j'écris

    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
    type
      TState = ();
      TStates = set of TState;
     
     
    var
      States : TStates;
      Txt : String;
    begin
      States := [sModified,sNew];
     
      Txt = convert(TState); 
      // convert() doit retourner "[sNew,sModified,sLoaded]"
     
      Txt = convert(States); 
      // convert() doit retourner "[sNew,sModified]"   
     
    end;
    Existe-t-il des fonctions en Delphi 7 ?

    Y'a bien SetToString dans TypInfo mais elle ne fonctionne pas comme je voudrais

    Merci

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je en sais pas s'il y a plus simple, mais je me souviens avoir codé un truc générique pour cela...

    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
    25
    26
    27
    28
    29
     
    function FlagsToString(Flag:cardinal; Names:array of string):string;
    var
     i : integer;
    begin
     Result:='';
     i:=0;
     while Flag <>0 do begin
      if (Flag and (1 shl i))<>0 then begin
       Result:=Result+','+Names[i];
       dec(Flag,1 shl i);
      end;
      inc(i);
     end;
     if Result='' then 
      Result:='[]' 
     else begin
      Result[1]:='[';
      Result:=Result+']';
     end;
    end;
     
    const
     StateNames:array[TState]=(
     'sNew','sModified','sLoaded'
     );
    begin
     Tx:=FlagsToString(ord(States),StateNames);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    uses TypeInfo;
    ...
    begin
     for AState:=Low(TStates) to High(TStates) do
          if AState in States then
             st := st + GetEnumName(TypeInfo(TStates), Integer(AState)) + ' ';
    end;

    @+ Phil

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Dans le même esprit qu'anapurna, je verrais une fonction comme celle-ci:
    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
    uses
      TypInfo;
     
    function StatesToString(AStates: TStates): string;
    var
      AState: TState;
    begin
      Result := '';
      for AState := Low(TState) to High(TState) do
        if AState in AStates then
        begin
          if Result <> '' then
            Result := Result + ', ';
          Result := Result + GetEnumName(TypeInfo(TState), Ord(AState));
        end;
      Result := '[' + Result + ']';
    end;
    @+ Cl@udius

  5. #5
    Membre confirmé Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Par défaut
    Low() et High() ne fonctionnent pas avec les types énumérés :
    erreur Types incompatibles

    Oups : autant pour moi ça fonctionne j'avais mis TStates au lieu de TState

    Par contre y'aurait pas un moyen de faire ça de façon générique valable quelquesoit le type ?

  6. #6
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Re,

    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function EnumToString: string;
    var
      I: Integer;
    begin
      Result := '[';
      for I := Ord(Low(TState)) to Ord(High(TState)) do
        Result := Result + GetEnumName(TypeInfo(TState), I) + ', ';
      SetLength(Result, Length(Result) - 2);
      Result := Result + ']';
    end;
    @+

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

Discussions similaires

  1. [SQL2k5][SSIS] Quotes générées dans mes variables dynamiques
    Par Ivynox dans le forum Développement
    Réponses: 0
    Dernier message: 09/08/2010, 10h45
  2. Réponses: 6
    Dernier message: 01/05/2009, 16h35
  3. [VBA-E] Erreur "Object variable or With block variable not set"
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/06/2006, 12h39
  4. [XSLT] 2.0 et variables node-set
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/01/2006, 17h01
  5. Réponses: 3
    Dernier message: 01/12/2004, 09h43

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