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

Delphi Discussion :

[D5] Charger rapidement un type record


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut [D5] Charger rapidement un type record
    Connaissez vous un moyen de charger rapidement un type record (boucle ou boucles imbriquées).
    Je m’explique : je souhaite créer un code permettant de gérer (créer, modifier) des feuilles de personnages pour un jeu.
    Un personnage représente une multitude de variables (Force, Dextérité ..., Compétences diverses, Classes, niveaux,…).
    Pour ce faire j’ai pensé créer un type enregistrement.
    Certains de ces enregistrements sont eux-mêmes de type enregistrement qui peuvent être encore de type enregistrement (jusqu’à présent j’ai ainsi 3 niveaux mais je commence juste).
    Le premier problème que je sent pointer va être pour la sauvegarde et/ou le chargement de cette structure.
    Si par exemple je décidais de charger / sauvegarder toutes ces variables de façon linéaire dans un fichier .TXT, cela parait simple à ouvrir / fermer et incrémenter mais pour alimenter la structure qu’en est-il ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    C'est rapide à charger, pas de soucis.
    Préféres l'instruction record à packed record. les record compréssés sont plus lent d'accés.

    Tu créés 2 fonctions genre RecordDansFichier et FichierDansRecord qui
    sauvegarde les données dans un fichier .ini et qui charge par section les données dans les records à l'initialisation de l'application.

  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

    ah bin la je suis pas d'accord avec le jeune homme parcque
    sinon tu vas te retrouve bloquer par des imcompatibilite avec les version precedente ou suivante de delphi

    le record n'est pas forcement une bonne solution
    un fichier text ne pose pas ce genre d'inconvenient mais il est facilement modifiable

    un solution serait de te servir d'un fichier texte compresser
    afin que le s donnée ne soit pas disponible directement


    @+ Phil

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Heu... J'ai écrit d'utiliser un record et non un packed record.

    Je ne vois pas le probleme d'incompatibilité puisque je précise d'utiliser un record qui lui est compatible mais de proscrire le packed record qui lui ne l'est pas.

  5. #5
    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

    laisse tomber en plus j'au vu que tu le lit dans un fichier ini et pas dans un fichier de record

    @+ Phil

  6. #6
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Fabrice ROUXEL 1 C'est rapide à charger, pas de soucis.
    Préféres l'instruction record à packed record. les record compréssés sont plus lent d'accés.
    Tu créés 2 fonctions genre RecordDansFichier et FichierDansRecord qui
    sauvegarde les données dans un fichier .ini et qui charge par section les données dans les records à l'initialisation de l'application.
    Voici une partie de la déclaration.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    type
      TDon  = Record
        Don1  : ShortString;   // Libellé du 1er don au niveau x
        Don2  : ShortString;   // Libellé du 2ème don au niveau x
        Don3  : ShortString;   // Libellé du 3ème don au niveau x
      end;
     
      TClas = Record
        LibClas : ShortString;   // Libellé de la classe de base
        Niveau  : Shortint;      // Niveau atteint dans la classe de base
        DV      : Byte;          // Dé de vie
        ModRef  : Shortint;      // Modificateur aux jets de Reflexes f(classe1)
        ModVig  : Shortint;      // Modificateur aux jets de Vigueur f(classe1)
        ModVol  : Shortint;      // Modificateur aux jets de Volonté f(classe1)
        M_Att1  : Shortint;      // Modificateur aux jets de 1ère attaque f(classe1)
        M_Att2  : Shortint;      // Modificateur aux jets de 2ème attaque f(classe1)
        M_Att3  : Shortint;      // Modificateur aux jets de 3ème attaque f(classe1)
        M_Att4  : Shortint;      // Modificateur aux jets de 4ème attaque f(classe1)
        M_Att5  : Shortint;      // Modificateur aux jets de 5ème attaque f(classe1)
        M_Att6  : Shortint;      // Modificateur aux jets de 6ème attaque f(classe1)
        M_Att7  : Shortint;      // Modificateur aux jets de 7ème attaque f(classe1)
        M_Att8  : Shortint;      // Modificateur aux jets de 8ème attaque f(classe1)
     
        Don1N01 : TDon;          // 3 Premiers dons au niveau 1
        Don2N01 : TDon;          // 3 dons suivants au niveau 1
        Don1N02 : TDon;          // 3 Premiers dons au niveau 2
        Don1N03 : TDon;          // 3 Premiers dons au niveau 3
        Don1N04 : TDon;          // 3 Premiers dons au niveau 4
        Don1N05 : TDon;          // 3 Premiers dons au niveau 5
        Don1N06 : TDon;          // 3 Premiers dons au niveau 6
        Don1N07 : TDon;          // 3 Premiers dons au niveau 7
        Don1N08 : TDon;          // 3 Premiers dons au niveau 8
        Don1N09 : TDon;          // 3 Premiers dons au niveau 9
        Don1N10 : TDon;          // 3 Premiers dons au niveau 10
        Don1N11 : TDon;          // 3 Premiers dons au niveau 11
        Don1N12 : TDon;          // 3 Premiers dons au niveau 12
        Don1N13 : TDon;          // 3 Premiers dons au niveau 13
        Don1N14 : TDon;          // 3 Premiers dons au niveau 14
        Don1N15 : TDon;          // 3 Premiers dons au niveau 15
        Don1N16 : TDon;          // 3 Premiers dons au niveau 16
        Don1N17 : TDon;          // 3 Premiers dons au niveau 17
        Don1N18 : TDon;          // 3 Premiers dons au niveau 18
        Don1N19 : TDon;          // 3 Premiers dons au niveau 19
        Don1N20 : TDon;          // 3 Premiers dons au niveau 20
        Don1N21 : TDon;          // 3 Premiers dons au niveau 21
        Don1N22 : TDon;          // 3 Premiers dons au niveau 22
        Don1N23 : TDon;          // 3 Premiers dons au niveau 23
        Don1N24 : TDon;          // 3 Premiers dons au niveau 24
        Don1N25 : TDon;          // 3 Premiers dons au niveau 25
        Don1N26 : TDon;          // 3 Premiers dons au niveau 26
        Don1N27 : TDon;          // 3 Premiers dons au niveau 27
        Don1N28 : TDon;          // 3 Premiers dons au niveau 28
        Don1N29 : TDon;          // 3 Premiers dons au niveau 29
        Don1N30 : TDon;          // 3 Premiers dons au niveau 30
        Don1N31 : TDon;          // 3 Premiers dons au niveau 31
        Don1N32 : TDon;          // 3 Premiers dons au niveau 32
        Don1N33 : TDon;          // 3 Premiers dons au niveau 33
        Don1N34 : TDon;          // 3 Premiers dons au niveau 34
        Don1N35 : TDon;          // 3 Premiers dons au niveau 35
        Don1N36 : TDon;          // 3 Premiers dons au niveau 36
        Don1N37 : TDon;          // 3 Premiers dons au niveau 37
        Don1N38 : TDon;          // 3 Premiers dons au niveau 38
        Don1N39 : TDon;          // 3 Premiers dons au niveau 39
        Don1N40 : TDon;          // 3 Premiers dons au niveau 40
      end;
     
      Tpnj = record
        Race    : ShortString;   // Libellé de la race
        RCTail  : ShortString;   // Catégorie de taille
        RMFor   : Shortint;      // Modificateur Racial de Force
        RMDex   : Shortint;      // Modificateur Racial de Dextérité
        RMCon   : Shortint;      // Modificateur Racial de Constitution
        RMInt   : Shortint;      // Modificateur Racial d'Intelligence
        RMSag   : Shortint;      // Modificateur Racial de Sagesse
        RMCha   : Shortint;      // Modificateur Racial de Charisme
        RClPred : ShortString;   // Classe de prédilection f(race)
        RVDpltM : Shortint;      // Vitesse de déplacement de Base en mètres
        RVDpltC : Shortint;      // Vitesse de déplacement de Base en cases
        RDonSup : Boolean;       // Don supplémentaire f(race)
        RPCpSup : Shortint;      // Points de compétances supplémentaire f(race)
        RLang_1 : ShortString;   // 1ère langue parlée f(race)
        RLang_2 : ShortString;   // 2ème langue parlée f(race)
        Lang_3  : ShortString;   // 3ème langue parlée f(intelligence)
        Lang_4  : ShortString;   // 4ème langue parlée f(intelligence)
        Lang_5  : ShortString;   // 5ème langue parlée f(intelligence)
        Lang_6  : ShortString;   // 6ème langue parlée f(intelligence)
        RVisNct : Boolean;       // Vision Nocturne;
        RVisNoir: Shortint;      // Vision dans le noir en m
        RMAttV  : Shortint;      // Valeur du modificateur racial aux jets d'attaque.
        RMAttR  : ShortString;   // Liste des races pénalisées par le racial aux jets d'attaque.
        RMPoids : Shortint;      // Modificateur racial de poids porté % par rapport à taille M
        RMRef   : Shortint;      // Modificateur racial aux jets de Reflexes
        RMVig   : Shortint;      // Modificateur racial aux jets de Vigueur
        RMVol   : Shortint;      // Modificateur racial aux jets de Volonté
     
        Clas_1  : TClas;         // Classe de base
        Clas_2  : TClas;         // 2ème Classe
        Clas_3  : TClas;         // 3ème Classe
        Clas_4  : TClas;         // 4ème Classe
     
        NivGlob : Shortint;      // Niveau global atteint = somme des niveaux de chaque classe
        LimCC   : Shortint;      // Niveau limite des compétences de classe = Niveau global + 3
        LimHC   : Shortint;      // Niveau limite des compétences hors classe = Niveau global + 3 / 2
    end;
    Là ou je ne vois pas comment faire c'est justement pour charger ma structure!
    Si j'écris par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Var
    MonPNJ : Tpnj;
      Cptr1, Cptr2, Cptr3 : Integer;
      For Cptr1 := 0 to X do
         MonPNJ[Cptr1] := MavariableChargée[Cptr1].Value
    C'est pas glop.

  7. #7
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    J'ai mis une unité en piece jointe pour que tu puisses voir le principe.
    Elle n'est pas achevée.
    Merci pour la démonstration d'utilisation de fichier .ini.
    Je déduis de l'énumération qu'on ne peut pas le faire au moyen de boucles et d'index. C'est donc résolu pour moi.
    Merci encore pour le temps passé à écrire cette longue série d'affectations.

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

Discussions similaires

  1. [PL/SQL] : type record et FORALL
    Par PpPool dans le forum Oracle
    Réponses: 10
    Dernier message: 18/10/2005, 19h35
  2. [PLSQL] TYPE RECORD
    Par romuald9999 dans le forum Oracle
    Réponses: 13
    Dernier message: 19/08/2004, 15h18
  3. [LG]fichier typé; record et pointeurs
    Par rigel dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2004, 16h12
  4. [LG]Resultat de fonction de type Record ?
    Par Mike888 dans le forum Langage
    Réponses: 10
    Dernier message: 24/01/2004, 22h48
  5. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

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