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

C++Builder Discussion :

remplissage d'une StringGrid


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut remplissage d'une StringGrid
    Je teste un programme en vue de remplir une StringGrid avec des coordonnees venant d'un GPS ces coordonnes sont dans un fichier texte environ 30 colonnes et plus de 6000 lignes je peu l'ouvrir, j'ai repris le code de Mattetfamilly pour charger le StringGrid mais
    - premierement j'ai une erreur que ne parvient pas a resoudre
    - deuxiement mon StringGrid contient 30 colonnes et apres execution une seule colonne apparait
    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
    //----------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "stringgrid.h"
    //----------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //----------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    ///////////////////////////////////
    {
      OpenDialog1->Options.Clear();
      OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
      OpenDialog1->Filter = "Fichiers TXT (*.TXT) (*.txt)|*.txt|Fichiers DOC (*.DOC) (*.doc)|*.doc|Fichiers CSV (*.CSV) (*.csv)|*.csv";
      OpenDialog1->FilterIndex = 1; // demarre le dialogue d'affichage des fichiers
    //////////////////////////////////
    if(OpenDialog1->Execute())
            {
            String FilePath = OpenDialog1->FileName;
     
    int i;
    int j;
    AnsiString convertisseur;
    TStringList *MyStringList = new TStringList();
    MyStringList->LoadFromFile(FilePath); //Si tu as créer ton extension lors de la sauvegarde, penses à réutiliser la même ici.
    for(i=0;i<MyStringList->Count;i++)
    {
    convertisseur=MyStringList->Strings[i];
    for(j=0;(convertisseur.Pos("\t")>=1);j++)
    {
    convertisseur[convertisseur.Pos("\t")]='\n';
    }
    //voir s'il faut ajouter un test sur le cas où j=0
    StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
     
    if(i>(StringGrid1->RowCount-1))
    StringGrid1->RowCount = i+1;
    StringGrid1->Rows[i] = convertisseur;
    }//fin du for
    delete MyStringList; //si cette ligne te poses un soucis essayes de la supprimer: en théorie elle est nécessaire.
    }
    ERREUR sur la ligne soulignee
    [C++ Error] stringgrid.cpp(51): E2034 Cannot convert 'AnsiString' to 'TStrings *'

  2. #2
    Membre éprouvé

    Profil pro
    Cadre
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Par défaut
    Chaque Row est composé de Cells

    Donc quand tu dit

    StringGrid1->Rows[i] = convertisseur;
    Tu place un ansistring dans une liste d'ansitring..pas cool

    Pour accéder aux Strings d'une Row, utilises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Rows[i]->Strings[x] = convertisseur // x correspond à la ligne, 0 pour la première, souvent grisée

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci pour la reponse Tenguryu je ne connaisse pas
    maintenant cela fonctionne partiellement
    je ne rempli que la 1er cellule.
    En mode pas a pas je recupere bien mes chaines et j'ecremente le compteur de ligne
    voici le code reecrit qui remplace la ligne source d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Rows[i]->Strings[i] = convertisseur; // x correspond à la ligne, 0 pour la première, souvent grisée

  4. #4
    Membre expérimenté Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Par défaut
    Non!

    Le code suivant n'est pas bon.
    Il correspond à un chargement cellules per celuules.
    D'ailleurs, il va remplir la grille en diagonale...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Rows[i]->Strings[i] = convertisseur

    Le bon code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Rows[i]->Text = convertisseur

    L'erreur indiquée correspond bien à mon erreur de saisie...
    C'est normal que tu n'es qu'une colonne, c'est lié à l'erreur.
    Une fois corrigée, tu devrais avoir toutes tes colonnes.

    Désolé

    Mattetfamilly

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je te remercie Mattetfamilly pour ta reponse et surtout ne te fais pas de soucis l'erreur est humaine et puis ca fait chercher je vais donc tester ce que tu ma donne je te tiens au courant
    A +

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    j'ai teste ta ligne de code effectivement ca ecrit toute une colonne de plus de 6000 ligne seulement il n'y a qu'une seule colonne d'ecrite il devrait en avoir environ 30 je continue a chercher de mon cote je joind mon code
    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
     
    //----------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "stringgrid.h"
    //----------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //----------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    ///////////////////////////////////
    // ici on appelle la boite de dialogue ouvrir un fichier
    // avec les options et le filtre
      OpenDialog1->Options.Clear();
      OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
      OpenDialog1->Filter = "Fichiers TXT (*.TXT) (*.txt)|*.txt|Fichiers DOC (*.DOC) (*.doc)|*.doc|Fichiers CSV (*.CSV) (*.csv)|*.csv";
      OpenDialog1->FilterIndex = 1; // demarre le dialogue d'affichage des fichiers
    ///////////////////////////////////
    if(OpenDialog1->Execute())
            {
            String FilePath = OpenDialog1->FileName;
    ///////////////////////////////////
    // ici on va charger la StringGrid avec le fichier
    int i;
    int j;
    AnsiString convertisseur;
    TStringList *MyStringList = new TStringList();
    MyStringList->LoadFromFile(FilePath); //Si tu as créer ton extension lors de la sauvegarde, penses à réutiliser la même ici.
    for(i=0;i<MyStringList->Count;i++)
    {
    convertisseur=MyStringList->Strings[i];
    for(j=0;(convertisseur.Pos("\t")>=1);j++)
    {
    convertisseur[convertisseur.Pos("\t")]='\n';
    }
    //voir s'il faut ajouter un test sur le cas où j=0
    StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
    if(i>(StringGrid1->RowCount-1))
    StringGrid1->RowCount = i+1;
    StringGrid1->Rows[i]->Text = convertisseur; // x correspond à la ligne, 0 pour la première, souvent grisée
    }//fin du for
    delete MyStringList; //si cette ligne te poses un soucis essayes de la supprimer: en théorie elle est nécessaire.
    }
    }

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

Discussions similaires

  1. Problème de performance avec remplissages d'une StringGrid ?
    Par Night_Wolf1619 dans le forum Débuter
    Réponses: 17
    Dernier message: 06/05/2013, 16h09
  2. Utilisation d'une StringGrid
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/09/2004, 15h27
  3. [Kylix] Trier le contenu d'une StringGrid
    Par cmp-france dans le forum EDI
    Réponses: 1
    Dernier message: 01/04/2004, 09h18
  4. Remplissage d'une zone d'un canvas
    Par ulysse66x dans le forum Composants VCL
    Réponses: 5
    Dernier message: 31/01/2004, 12h41
  5. Sauver une StringGrid dans un fichier
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/12/2003, 14h52

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