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

Lazarus Pascal Discussion :

Remplir une table (array) avec des données d'un StringGrid [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Points : 24
    Points
    24
    Par défaut Remplir une table (array) avec des données d'un StringGrid
    Bonjour,

    J'ai des données stockées dans une grille (TStringGrid) represenant des données mensuelles pour un lieu donné ID (donc 12 valeurs pour un ID). J'ai un total de 10 000 lieux (Ie 10 000 ID). Ca se presente comme cela :

    ID Tmin Tmax Mois ...
    1 5 12 1
    1 7 12 2
    1 10 12 3
    1 10 12 4
    1 8 23 5
    1 10 16 6
    1 10 12 7
    1 5 19 8
    1 10 12 9
    1 10 12 10
    1 9 11 11
    1 10 12 12
    2 9 14 1
    2 9 14 2
    2 9 14 3
    2 10 17 4
    2 9 14 5
    2 7 14 6
    2 9 14 7
    2 3 13 8
    2 8 11 9
    2 9 10 10
    2 9 14 11
    2 9 14 12
    ...
    Mon but est de stocker ces valeurs dans une table. J'ai alors créé une classe de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TLocations = record
         ID,Mois... :double;
         Tmin,Tmax...: array [1..13] of double;
         end;
    puis j'aimerais acceder aux valeurs d'un ID comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Location : array [1..10000] of TLocations // Creation de l'objet Location
    variableTminmoisdemarspourlelieu2(ID=2):= Location[2].Tmin[4]
    Quelqu'un pourrait m'indiquer comment assigner les valeurs du StringGrid dans mon objet Location ?
    Sachant que ce qui me pose probleme est que pour 1 lieu (1 ID) correspondent plusieurs lignes (12 excatement) de ma grille (donc une simple boucle est pas facile a faire)

    Merci pour votre aide !!

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Une simple question : pourquoi veux-tu créer un tableau à partir de ton stringgrid ??? pour avoir les données en double !??
    Le stringgrid contient toutes les données, il suffit de créer des fonctions de recherche d'après critères: lieu, mois...

    Thierry

  3. #3
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Pourquoi utiliser une TStringGrid, qui est un composant visuel, pour y stocker 120 000 lignes (si j'ai bien compris). Personne ne peut avoir besoin de visualiser une telle quantité de données, et encore moins être capable de la saisir, surtout s'agissant des codes numériques.

    Si c'est pour faire un traitement en mémoire, un tableau structuré tel que tu l'as ébauché sera nettement préférable.

    Si la question porte sur la manière de lire les données d'une TStringGrid, je crois que la réponse n'est pas très difficile à trouver.

    Ecrire une boucle parcourant 12 éléments, ne parait pas non plus insurmontable. Quelle est la difficulté exactement ? Sais exactement ce que tu veux faire, et peux-tu le décrire clairement ?

    Autres remarques :


    • Il est plutôt inutile de déclarer des types double pour stocker ce qui semble être des entiers assez petits. Avec cette volumétrie, il faut mieux optimiser.
    • Tu n'as pas défini de classe, ni créé d'objet, mais seulement déclaré des types record et des variables. Ce n'est pas la même chose.


    Bon courage pour la suite !
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Je debute avec lazarus, donc mes questions peuvent paraitre un peu idiotes, je l'admets !

    Donc pour resumer mon pb :
    - mes données sources sont dans un fichier texte (delimité par ";"), et je veux lire ces données et les stocker dans un objet ou classe, ou record, (ou je ne sais quoi... !), bref quelque chose qui me permet d'acceder facilement aux differentes valeurs, en tapant :
    i etant le numero du lieu
    j etant le numero de mois

    - Vous pensez donc qu'il n'y a pas besoin de passer par un string grid (a part pour visualiser les données) pour les stocker dans mon "objet de type" TLocation ?
    et/ou
    - Il est inutile de creer ce TLocation, car le string grid fait la meme chose?

    C'est bien ca?

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Ah, c'est un peu plus clair !

    Je te confirme que l'utilisation d'une TStringGrid n'est certainement pas optimale, et qu'il faut mieux une variable de type tableau composé, si le traitement ne peut être fait qu'en mémoire et que celle-ci est suffisante.

    Le tableau pourrait être déclaré comme ceci, au moins dans un 1er temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TMesure = record 
                     Tmin, TMax : SmallInt; // ou même Byte avec décalage pour prise en compte des températures négatives ; 
                     end ;
     
    var
      Tableau : array[1..10000, 1..12] of TMesure ;

    et assigné comme ceci pour la température min du mois d'avril (mois n°4) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau[Id, 4].Tmin := Temp ;  // avec 1 <= Id <= 10000
    A mon avis tu auras vite besoin d'un tableau dynamique car la limite de 10000 est certainement arbitraire.

    Pour remplir le tableau à partir du fichier, il y a de nombreuses possibilités. Personnellement j'utiliserais un TSdfDataSet qui devrait permettre de coder ça en moins de 10 lignes, tout en étant efficace.

    Mais je vais arrêter de faire ton devoir à ta place !
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ton aide constructive.

    Je regarde de ce pas le TSdfDataSet !

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

Discussions similaires

  1. remplir une page html avec des données de la bsase
    Par zanoubya dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 26/07/2013, 14h26
  2. [MySQL] Remplir une liste déroulante avec des données de la base de données
    Par moukit233 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 12/08/2009, 11h05
  3. Réponses: 2
    Dernier message: 11/05/2009, 19h04
  4. Réponses: 11
    Dernier message: 18/10/2007, 12h49
  5. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03

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