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 :

problème d'imporatation de fichier CSV vers une StringGrid


Sujet :

C++Builder

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut problème d'imporatation de fichier CSV vers une StringGrid
    Bonjour,
    J'ai un problème lors de mon imporation de mon fichier csv, il me manque une colonne à la fin...
    voici 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
    48
    49
    50
    void __fastcall TForm_agenda::BitBtn_importClick(TObject *Sender)
    {
    //chargement du fichier
    ProgressBar1->Visible = true;
    ///////////////////////////////////
    // ici on va charger la StringGrid avec le fichier
        int i;
        int j;
        char a;
        AnsiString convertisseur;
        TStringList *MyStringList = new TStringList();
        MyStringList->LoadFromFile(FilePath);
        ProgressBar1->Max = MyStringList->Count;
        ProgressBar1->Min = 0;
        ProgressBar1->Step = 1;
     
        for(i=0;i<MyStringList->Count;i++,ProgressBar1->StepIt())
        {
          convertisseur=MyStringList->Strings[i];
          // teste pour trouver les separateurs en fonction on modifie
          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;
     
            if(i>(StringGrid1->RowCount-1))
            StringGrid1->RowCount = i+1;
     
            StringGrid1->Rows[i]->Text = convertisseur;
     
          }//fin du 2ème for
         }//fin du 1er for
        delete MyStringList;
    //  Fichier_Charge = true;
      ProgressBar1->Visible = false;
    }
    Merci par avance pour votre aide!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Salut,

    Les colCount et RowCount commencent à 1 dans les TStringGrid, donc commence ta boucle for avec j=1 et tu verras la dernière colonne. Actuellement tu importes bien mais la dernière colonne n'existe pas.

    Tu pourrais aussi écrire la ligne uniquement à la fin de la boucle et pas à chaque fois dans la boucle en rajoutant un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if (convertisseur.Pos(a) == 0)
    			StringGrid1->Rows[i]->Text = convertisseur;
    Voilà, bonne journée

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    le problème est identique... cela ne change rien au résultat final....

  4. #4
    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
    Salut ludojojo
    Je pense que ton code est tire de ce lien
    En mode pas a pas je verifirais les valeurs de " i " ou de " j ", tu peut aussi les afficher avec un TLabel, ca permet de verifier le nombre de boucles et de comparer au nombre de lignes et colonnes
    Il y a quand meme une ligne qui m'intrigue, je ne sais pas si on peut l'ecrire
    for(i=0;i<MyStringList->Count;i++,ProgressBar1->StepIt())

  5. #5
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Il y a quand meme une ligne qui m'intrigue, je ne sais pas si on peut l'ecrire:
    for(i=0;i<MyStringList->Count;i++,ProgressBar1->StepIt())
    Si, on peu très bien écrire cela, c'est une particularité des boucles for en c++, on peut placer plusieurs (ou au contraire aucune) instruction dans l'initialisation et dans l'incrément.

    Pour t'en convaincre tu peux essayer une boucle du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      int i, j ;
      for(i=0, j=10;  i<10;  i++, ShowMessage(i), ShowMessage(j)  );

  6. #6
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Concernant l'import de fichier CSV dans un TStringGrid, voici une fonction que j'utilise souvent et qui marche sans problème, si jamais ca peut t'etre utile :

    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
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
      TStringList *fichier = new TStringList();
      fichier->LoadFromFile( "D:\\essai.csv" ) ;
     
      TStringList *ligne ;
     
      StringGrid1->RowCount = fichier->Count ;
     
      for( int i=0; i< fichier->Count; i++ )
      {
        ligne = new TStringList() ;
        ligne->Text = StringReplace(fichier->Strings[i], ',' , "\n", TReplaceFlags()<< rfReplaceAll );
        StringGrid1->ColCount = ligne->Count ;
        for(int j=0; j < ligne->Count; j++)
        {
          StringGrid1->Cells[j][i] = ligne->Strings[j] ;
        }
        delete ligne ;
      }
      delete fichier ;
    }
    A noter que dans cet exemple le délimiteur est fixe (','), mais que ce n'est pas trop compliqué d'en ajouter d'autres...

Discussions similaires

  1. Transférer un fichier CSV vers une nouvelle table Access
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2011, 10h57
  2. Import d'un fichier CSV vers une table
    Par yahia elfakr dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2010, 10h33
  3. Réponses: 0
    Dernier message: 16/08/2010, 16h29
  4. exportation de d'un fichier csv vers une table sql
    Par sanounatibibt dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/01/2010, 16h59
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

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