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 :

Comment enregistrer un type enuméré dans un fichier ?


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut Comment enregistrer un type enuméré dans un fichier ?
    Salut à tous,

    J'ai un type enuméré et une variable de ce type comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Type
       TMonType = (mtType1,mtType2,mtType3,...,mtTypen);
      ....
      ....
       private
         FMonVar   : TmonType;
    J'aimerais enregistrer ou charger la valeur de FMonVar depuis un fichier texte. Comment dois je proceder

    Merci
    On progresse .....

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Une piste toute bête : les types énuméré possèdent des "valeurs ordinales" (je ne sais pas si le terme est vraiment celui la), accessible via la fonction Ord().
    Dans ton exemple, Ord(mtType1) = 0, Ord(mtType2) = 1, etc... De cette façon, tu peut écrire dans ton fichier la valeur correspondante.
    Par contre, pour la lecture, il faut à mon avis se farcir un case of :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case i of
      0 : FMonVar := mtType1;
      1 : FMonVar := mtType2;
      ...
    end;
    Si quelqu'un a une meilleur solution pour la lecture, je suis également preneur !

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Ecriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WriteLn(f, IntToStr(mtType1));
    LEcture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ReadLn(f, i);
    MonType := TMonType(StrToInt(i));
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Comme dit au dessus un élément de type énuméré possède une correspondance ordinale égale à sa position dans la liste. Il faut donc faire attention si on rajoute un nouvel élément à le mettre à la fin sinon on risque d'avoir des problèmes lors de la lecture de fichier d'une version précédente.

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    sinon on risque d'avoir des problèmes lors de la lecture de fichier d'une version précédente.
    Ca de toute facon si on change quoi que ce soit dans les donnees sauvegardé, ya de grande chance d'avoir des problemes de compatibilités de versions.
    Mais bon la ca releve plus de la gestion de versions.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Clorish
    sinon on risque d'avoir des problèmes lors de la lecture de fichier d'une version précédente.
    Ca de toute facon si on change quoi que ce soit dans les donnees sauvegardé, ya de grande chance d'avoir des problemes de compatibilités de versions.
    Mais bon la ca releve plus de la gestion de versions.
    On peut aussi associer un nom à chaque type et sauvegarder le nom dans le fichier plutôt que simplement son numéro. C'est un peu plus compliqué, et beaucoup plus long, mais c'est plus souple.

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Reste le choix de la souplesse ou de la simplicite ;p

    A voir Chacun est libre ;p
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #8
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Beauciup plus efficace en utilisant RTTI :
    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
     
    uses
      TypInfo;
     
    type
      TMonType = (mtType1, mtType2, mtType3);
    var
      FMonType: TMonType;
     
    procedure test;
    var
      s: string;
    begin
      FMonType:= mtType2;
     
      // Récupération de la chaîne correspondant à la valeur de FMonType
      s:= GetEnumName(TypeInfo(TMonType), Ord(FMonType));
      // s = 'mtType2'
     
      // Récupération de la valeur correspondant à la chaîne s
      FMonType:= TMonType(GetEnumValue(TypeInfo(TMonType), 'mtType3'));
      // FMonType = mtType3
    end;

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Beauciup plus efficace en utilisant RTTI :
    Bha si tu vas chercher dans le compliqué ......
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Clorish
    Beauciup plus efficace en utilisant RTTI :
    Bha si tu vas chercher dans le compliqué ......
    Et puis ça rend les fichiers de sauvegarde dépendant des conventions de codage.

  11. #11
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Merci les amis,

    Je vais essayer de mettre tout ça en pratique.

    Encore merci.
    On progresse .....

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/04/2006, 09h33
  2. Réponses: 12
    Dernier message: 27/01/2006, 11h07
  3. comment effacer la premiere ligne dans un fichier
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/12/2005, 10h14
  4. Comment écrire en big endian dans un fichier ?
    Par j3d dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/07/2005, 21h50
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

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