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

  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
    Points : 3 766
    Points
    3 766
    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 *'
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #2
    Membre habitué

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

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 168
    Points
    168
    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
    Du bon sens tu auras
    Du bon sens tu auras encore
    Du bon sens tu auras toujours
    http://emilien.bresson.free.fr

  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
    Points : 3 766
    Points
    3 766
    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
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    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
    on aura tout vu...
    Mais où est-ce???...
    ------------------------------------------------------
    n'oublies pas les balises [code ][/code ]
    et le Tag

  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
    Points : 3 766
    Points
    3 766
    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 +
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  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
    Points : 3 766
    Points
    3 766
    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.
    }
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Je suis toujours en panne, je ne trouve pas comment faire pour ecrire toutes les colonnes d'une ligne (precision sur une ligne toutes les colonnes ne sont pas systemetiquement ecrites).
    Quand je suis en mode pas a pas la ligne contient bien les separateurs, la colonnes 1 s'ecrit, les autres colonnes sont effacees.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Pour ma part, lorsque je veux remplir une stringGrid je passe par la propriété Cells qui s'utilise de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1->cells[L][C] = "";
    Ou L est l'index de la ligne et C l'index de la colonne.

    Avec cette commande une seule cellule de la grille est remplie. Je ne vois pas trop comment fonctionne votre code...vous bouclez une premiere fois sur le nombre de ligne mais pour le 2eme for votre condition de sortie évolue pendant que vous etes dans la boucle...

    Une boucle While serait plus appropriée je pense...

    Poilou
    Proverbe nain : On boira du lait le jour où les vaches mangeront du houblon !

    le site de ma douce et tendre

  9. #9
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse Poilou le code n'est pas de moi je l'ai repris afin de tester la StringGrid je debute en BCB, d'apres ce que j'avais cru comprendre la ligne suivante etait sencee se placer dans chaque colonne de la ligne automatiquement un peu comme "Excel" quand on charge un fichier texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Rows[i]->Text = convertisseur;
    Voila un type de chaine que je recoit dans la variable convertisseur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    convetisseur = { Data:"Waypoint\n000018\n90 AV D Amiens - Bapaume\n User Waypoint
    \n49 58.294 E2 32.679\n-0.114m\n\n\n\nSymbole & Name\nBlack\nWaypoint\n\n\n\n\n\n\n" }
    Si je dois utiliser une double boucle pour passer mes parametres dans chaque colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->cells[L][C] = "convertisseur";
    Je ne vois pas comment recuperer le separateur "\n" afin de traiter la chaine a passer dans chaque cellule
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  10. #10
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Voici une fonction que j'utilise pour séparer les éléments d'une chaine en fonction d'un séparateur...

    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
    void Split_Liste(TStrings* Liste,AnsiString Original,AnsiString Separateur)
    {
     while (Original.AnsiPos(Separateur) != 0)
     {
      Liste->Add(Original.SubString(1,Original.AnsiPos(Separateur) - 1));
      Original = Original.Delete(1,Original.AnsiPos(Separateur));
     }//endwhile
     
     
     if (Original.Length() > 0)
     {
      if (Original != Separateur)
       Liste->Add(Original);
     }
    }
    tu vas donc avoir une variable de type TStringList* Liste qui va séparer les données d'une ligne.

    Tu peux ensuite boucler sur ton nombre de lignes et ensuite pour chaque lignes boucles sur le nombre de cases de la StringList

    Exemple de bout de code fait à la vavite :p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TStringList* UneLigne = new TStringList();
    AnsiString convertisseur; //contient les données d'une ligne
     
    Split_Liste(UneLigne,convertisseur,"\n");
     
    for(int j=0;j<UneLigne->Count;j++)
    {
     StringGrid1->Cells[j][i] = UneLigne->Strings[j]; //i étant une variable de ta précédente boucle for
    }

    En espérant que ça t'aide
    Proverbe nain : On boira du lait le jour où les vaches mangeront du houblon !

    le site de ma douce et tendre

  11. #11
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    merci pour ta reponse Poilou je tester ton code dans mon programme decidement je suis plus doue pour excel vbe que pour bcb
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  12. #12
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut
    Je penses qu'il y a un soucis avec les retours de chariots:
    il est possible que ton fichier lors de son chargement contienne des '\r'.
    Je penses que cela peut n'aficher qu'une colonne dans ces conditions...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    convertisseur=MyStringList->Strings[i];
    for(j=0;(convertisseur.Pos("\t")>=1);j++)
    {
    convertisseur[convertisseur.Pos("\t")]='\n';
    }
    do
    {
    convertisseur=convertisseur.delete(convertisseur.Pos("\r"),1);
    }while(convertisseur.Pos("\r")>=1);
    //
    je pensais l'avoir mis pourtant....
    on aura tout vu...
    Mais où est-ce???...
    ------------------------------------------------------
    n'oublies pas les balises [code ][/code ]
    et le Tag

  13. #13
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse Mattetfamilly j'ai visualise quelques chaines apparament il n'y a pas "\r" mais on ne sait jamais.
    Peut tu me dire si ton code rempli bien toutes les colonnes d'une ligne meme si, ces lignes on des colonnes vides entre deux et, pas le meme nombre de colonnes par ligne.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut
    Je crois que tu pointes bien le soucis et j'allais justement t'ajouter un post sur le sujet:

    En fait la ligne suivante n'est pas suffisante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
    corriges comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MyStringList->LoadFromFile(FilePath); //Si tu as créer ton extension lors de la sauvegarde, penses à réutiliser la même ici.
    StringGrid1->ColCount=1;//cela met la grille à une seule colonne de base
    StringGrid1->RowCount=1;//cela met la grille à une seule ligne de base
    for(i=0;i<MyStringList->Count;i++)
    {

    et corriges aussi comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(j>StringGrid1->ColCount)
    StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
    on aura tout vu...
    Mais où est-ce???...
    ------------------------------------------------------
    n'oublies pas les balises [code ][/code ]
    et le Tag

  15. #15
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Je te remerci Mattetfamilly le code fonctionne parfaitement dans ce premier essai je vois si cela fonctionne avec mes autres fichiers et je communiquerai le code pour ceux qui en auront besoin
    encore une fois merci
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  16. #16
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Je te remercie Mattetfamilly
    J'ai teste ton code ca marche il faut juste que je vois en fonction du separateur "\t" ou "\;" qui est differant suivant le type fichier, les separateur "\t" "\n" sont des separateur tire du c associes a la fonction printf
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #17
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai trouve une solution pour tester le separateur mais il me met un warning
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // teste pour trouver les separateurs en fonction on modifie
    // (convertisseur.Pos("\t"));
    if (a = (convertisseur.Pos("\t")) > 0)
    a = '\t';
    else
    if (a = (convertisseur.Pos("\;")) > 0)
    a = '\;';
    else
    if (a = (convertisseur.Pos("\,")) > 0)
    a = '\,';
    warning mis a la compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [C++ Warning] stringgrid.cpp(44): W8060 Possibly incorrect assignment
    [C++ Warning] stringgrid.cpp(47): W8060 Possibly incorrect assignment
    [C++ Warning] stringgrid.cpp(50): W8060 Possibly incorrect assignment
    pourtant le programme fonctionne et le type de separateur est bien pris en compte suivant le fichier appele
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  18. #18
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Salut !

    Je croi plutôt que tu veu faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    // teste pour trouver les separateurs en fonction on modifie
    // (convertisseur.Pos("\t"));
    if (convertisseur.Pos("\t") > 0)
    a = '\t';
    else
    if (convertisseur.Pos(";") > 0)
    a = ';';
    else
    if (convertisseur.Pos(",")> 0)
    a = ',';


    ++
    Plus tu prends part aux joies et chagrins des gens, plus ils te sont proches et chers. Mais c'est le chagrin et les problèmes qui vous rapprochent le plus.

    (Mark TWAIN)

  19. #19
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    merci pour ta reponse Interruption13h ca marche je n'ais plus de message d'erreur (je suis vraiment pas tres doue)
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  20. #20
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    je donne mon code pour ceux que cela interresse
    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
     
    //---------------------------------------------------------------------------
     
    #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;
    char a;
    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.
     
    StringGrid1->ColCount=1;//cela met la grille à une seule colonne de base
    StringGrid1->RowCount=1;//cela met la grille à une seule ligne de base
     
    for(i=0;i<MyStringList->Count;i++)
    {
    convertisseur=MyStringList->Strings[i];
     
    // teste pour trouver les separateurs en fonction on modifie
    // (convertisseur.Pos("\t"));
    if (convertisseur.Pos("\t") > 0)
    a = '\t';
    else
    if (convertisseur.Pos("\;") > 0)
    a = '\;';
    else
    if (convertisseur.Pos("\,") > 0)
    a = '\,';
     
    // on va chercher le separateur soit ( "\t" ) soit ( "\;" ) soit ( "\," )
    for(j=0;(convertisseur.Pos(a)>=1);j++)
    {
    // on va chercher le separateur soit ( "\t" ) soit ( "\;" ) soit ( "\," )
    convertisseur[convertisseur.Pos(a)]='\n';
     
    //voir s'il faut ajouter un test sur le cas où j=0
     
    if(j>StringGrid1->ColCount)
    StringGrid1->ColCount = j; //Il est possible que cela soit un j-1 ou un j+1...
    //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.
            }
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

+ 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