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 :

TStrings dans un Record


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut TStrings dans un Record
    Bonjour a tous

    je pense faire totalement fausse voie, mais bon !

    Dans un record, j'ai integre un tStrings pour tenir compte d'une certaine variabilite dans les informations a y entrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TYPE
      tChamps    =   RECORD
                        Id                : Integer;
                        Entete            : String[30];
                        CASE Code : Boolean OF
                           True : (id_Code         : Byte;
                                   Propre          : Boolean;
                                   ListCode        : TStrings;
                                   );
                     END;
    Ensuite un tableau dynamyque de ces record :
    TYPE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tTabChamps  = Array OF tChamps;
    Je cree bien sur une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabChamps  : tTabChamps;

    Mon tableau est inialise avec setlength(tabchamps, x);

    et son chargement fonctionne bien avec tous les parametres :
    Id,
    Entetes, etc

    mais evidemment des que j'essaye d'ajouter un truc dans la tstrings ca plante (j'imagine parce qu'elle n'a pas ete declare).

    Comment puis-je faire ?


    j'ai essaye une autre solution en changeant la tStrings en un autre Array dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TYPE
      tChamps    =   RECORD
                        Id                : Integer;
                        Entete            : String[30];
                        CASE Code : Boolean OF
                           True : (id_Code         : Byte;
                                   Propre          : Boolean;
                                   ListCode        : Array of String;
                                   );
                     END;
    mais ca ne marche, delphi demande de rendre ce second tableau statique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TYPE
      tChamps    =   RECORD
                        Id                : Integer;
                        Entete            : String[30];
                        CASE Code : Boolean OF
                           True : (id_Code         : Byte;
                                   Propre          : Boolean;
                                   ListCode        : Array[1..100] of String;
                                   );
                     END;
    mais evidemment ca prendrait trop de place

    qq a t-il une idee ??

    a+

    olivier

  2. #2
    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
    Citation Envoyé par dehorter olivier Voir le message
    mais evidemment des que j'essaye d'ajouter un truc dans la tstrings ca plante (j'imagine parce qu'elle n'a pas ete declare).

    Comment puis-je faire ?
    C'est plutôt parce qu'elle n'a pas été créée (TStringList.Create). Tu dois créer explicitement le champ ListCode de chaque record.
    Citation Envoyé par dehorter olivier Voir le message
    mais ca ne marche, delphi demande de rendre ce second tableau statique
    Normal, tu ne peux pas mettre de champ requiérant une initialisation dans un case de record. N'utilise pas de case ici.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Merci de l'info

    c'est vrai que declarer et creer ne veulent pas dire la meme chose, c'est ce que je sousentendais (mon clavier a fourche !).

    Mais je ne vois pas comment on peut creer le tstrings au pour chaque Records en utilisant setlength(x,x) ?

    desole de t'embeter avec ca !

    une solution ?

    a+
    olivier

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    j'ai essaye une autre solution en changeant la tStrings en un autre Array dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TYPE
      tChamps    =   RECORD
                        Id                : Integer;
                        Entete            : String[30];
                        CASE Code : Boolean OF
                           True : (id_Code         : Byte;
                                   Propre          : Boolean;
                                   ListCode        : Array of String;
                                   );
                     END;
    mais ca ne marche, delphi demande de rendre ce second tableau statique
    ... Delphi m'a fait le même coup dans un autre contexte.
    ... Du coup j'ai déclaré le type = tAOS; et remplacé l'équivalent de ListCode : Array of String; par ListCode : tAOS; et il a accepté la syntaxe et la suite a bien fonctionné.

    Par contre avant d'ajouter une string dans chacun des enregistrements il faut bien sûr faire le setLength() de préallocation pour chacun des enregistrements complété, si besoin est, d'une procédure de croissance du SetLength en cas de dépassement du setLength initial ... alors qu'en utilisant des StringLlists la préallocation puis la croissance sont gérés par les sous-couches dès lors qu'on a fait le MaStringList.Create pour chacun des enregistrements.

    A+

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Merci bcp!

    je teste ca ce soir a la maison...


    a+

    olivier

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Mon tableau est inialise avec setlength(tabchamps, x);
    et si après ca tu fais un "InitStringlists(tabchamps);"
    avec la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure InitStringLists(ATab: tTabChamps);
    var
      i: integer;
    begin
      for i := 0 to length(ATab)-1 do
        if not Assigned(ATab[i].ListCode) then
          ATab[i].ListCode := TStringList.Create;
    end;

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Ca marche impecablement bien




    merci a tous

    olivier

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2006, 10h56
  2. [Debutant]TString dans TList
    Par Ekik dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 10h38
  3. Réponses: 9
    Dernier message: 27/03/2006, 12h40
  4. Type TFont dans un record
    Par dacid dans le forum Langage
    Réponses: 4
    Dernier message: 12/12/2005, 13h24
  5. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 01/07/2004, 00h23

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