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 :

Charger des données.


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut Charger des données.
    Salut,

    Je souhaite récupérer des entiers contenu dans un fichier *.csv, représentés sous Excel comme deux colonnes, et les stocker dans deux vectors.
    Et je n'ai rien trouver de concret à ce sujet dans les tutos ou les Faqs, il y a souvent comment charger à partir de Excel mais les fichiers *.csv sont des fichiers textes...

    Alors si quelqu'un connaît un lien vers une discussion ou vers un tuto, je vous remercie...

  2. #2
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Une petite recherche dans la FAQ :

    Find(csv:C++Builder) = http://www.developpez.net/forums/sho...&highlight=csv

    boncourage

    = amis

  3. #3
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884

  4. #4
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Es-ce que ça a marchée

  5. #5
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    Je vais essayer de ce pas ...

    Merci...

  6. #6
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    Lorsque je remplie mon fichier *.csv, j'utilise "\n", pour changer de colonne et ";" de ligne, ensuite je voudrais remplir une matrice 2 dimensions Matrice[x][y]=z, avec les 3 colonnes du fichiers, x, y et z.

    Donc je dois l'ouvrir avec une OpenDialog, mais pas mettre les données dans une StringGrid, je pense, car pour ensuite les ranger dans la matrice ça fait plusieurs opérations...

    Et je ne pige pas tout, dans le code du dessus ce qui fait que je galère pour faire la modification, afin de ranger dans la matrice au lieu de la StingGrid...

  7. #7
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    Du coup j'ai essayé avec ça :

    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
    char buffer1,buffer2,buffer3;
     int x=0,y=0,z=0;
     
     OpenDialog1->Options.Clear();
     OpenDialog1->Filter = "Excel files (*.csv)|*.csv";
     if(OpenDialog1->Execute() == NULL)
     {
     //Si aucune sélection, on quitte
     ShowMessage("Aucun fichier sélectionnné, arrêt du processus");
     Application->Terminate();
     }
     else
     {
     String FilePath = OpenDialog1->FileName;
     
     TFileStream *file;
     
     file = new TFileStream("c:/"+FilePath+".csv",fmOpenRead);
     
     
     do
     {
      do
      {
       file->Read(buffer1,strlen(buffer1));
     
      }
      while(buffer1 != "\n");
     
     }
     while();
     }

    Mais je ne pige pas comment incrémenter la lecture dans le fichier *.csv...

    Si quelqu'un à une idée...

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    voilà un bout de code qui passe par un TStringList:
    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
     
        int matrice[100][100];
        if( OpenDialog1->Execute())
        {
            TStringList *FichierCSV = new TStringList;
            int ligne,colonne;
     
            FichierCSV->LoadFromFile(OpenDialog1->FileName);
            for(ligne = 0; ligne < FichierCSV->Count; ligne++)
            {
                AnsiString donneeCSV = FichierCSV->Strings[ligne];
                for(colonne = 0; colonne < 2; colonne++)
                {
                    if(donneeCSV.Pos(';') != 0) //  donneeCSV = "Xi;Yi"
                    {
                        matrice[ligne][colonne] = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(';')-1));//récupère "Xi"
                        donneeCSV.Delete(1,donneeCSV.Pos(';'));                                         //supprime "xi;"
                    }
                    else // donneeCSV = "Yi"
                    {
                        matrice[ligne][colonne] = StrToInt(donneeCSV);
                    }
                }
            }
        }

  9. #9
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    C'est super, c'est exactement ça que je voulais faire...

    Seulement, juste une petite question dans mon fichier *.csv, lorsque je l'ouvre avec Excel j'ai 3 colonnes, la premiere les x, la deuxieme les y et la troisieme les z...

    Qui doivent être stockés dans une matrice comme suit par exemple pour la ligne 1 : matrice[x1][y1]= z1..

    Est dans ton code, colonne est à la place de y, alors est-ce que cela correspond vraiment ça ?

    Merci...

  10. #10
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    Voilà où j'en suis :

    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
    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 = 2; // demarre le dialogue d'affichage des fichiers
    ///////////////////////////////////
     
    if(OpenDialog1->Execute() == NULL)
    {
    // si aucune selection on quitte
    ShowMessage("aucun fichier selectionné arret du programme");
    //Application->Terminate();
    }
    else
    {
    String FilePath = OpenDialog1->FileName;
     
    ///////////////////////////////////
    // ici on va charger la StringGrid avec le fichier
    int i, colonne;
    int j;
    int k;
    char b;
    int X,Y,Z;
    AnsiString donneeCSV;
    TStringList *FichierCSV = new TStringList();
    FichierCSV->LoadFromFile(FilePath); //Si tu as créer ton extension lors de la sauvegarde, penses à réutiliser la même ici.
     
    for(i=0;i<FichierCSV->Count;i++)
    {
     donneeCSV=FichierCSV->Strings[i];
     for(colonne = 0; colonne <= 2; colonne++)
                 {
                     if(i>0) //Car ma premiere ligne est toujours sans valeur
                     {
                     if(donneeCSV.Pos(";") > 0) //  donneeCSV = "Xi;Yi"
                     {
                         X = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(";")-1));//récupère "Xi"
                         donneeCSV.Delete(1,donneeCSV.Pos(";"));                                         //supprime "xi;"
                     }
                     else // donneeCSV = "Yi"
                     {
                         Y = StrToInt(donneeCSV);
                     }
                     }
                 }
     
    }
    }

    Alors ceci compile est tourne, sauf qu'il me manque la donnée en Z à remplir qui correspond à la troisieme colonne, là, je remplie déjà X et Y mais avec un souci car le X passe en Y, puis le Y passe en X, ect... au fur et à mesure du déroulement...

  11. #11
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    J'ai galéré, mais ça y est j'y suis arrivé :

    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
    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 = 2; // demarre le dialogue d'affichage des fichiers
    ///////////////////////////////////
     
    if(OpenDialog1->Execute() == NULL)
    {
    // si aucune selection on quitte
    ShowMessage("aucun fichier selectionné arret du programme");
    //Application->Terminate();
    }
    else
    {
    String FilePath = OpenDialog1->FileName;
     
    ///////////////////////////////////
    // ici on va charger la StringGrid avec le fichier
    int i, colonne;
    int j;
    int k;
    char b;
    int X,Y,Z;
    AnsiString donneeCSV;
    TStringList *FichierCSV = new TStringList();
    FichierCSV->LoadFromFile(FilePath); 
     
    for(i=0;i<FichierCSV->Count;i++)
    {
     donneeCSV=FichierCSV->Strings[i];
                                if(i>0) //Car ma premiere ligne est toujours sans valeur
                     {
                                        X = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(";")-1));//récupère "Xi"
                         donneeCSV.Delete(1,donneeCSV.Pos(";"));          //supprime "xi;"
                         Y = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(";")-1));//récupère "Yi"
                         donneeCSV.Delete(1,donneeCSV.Pos(";"));
                         Z = StrToInt(donneeCSV);//récupère "Zi"
                         Matrice[X][Y]= Z;
     
                                      }
     
     
    }
    }
    Merci...

  12. #12
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Juste un petit truc :

    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
     
     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 = 2; // demarre le dialogue d'affichage des fichiers
     
    ///////////////////////////////////
     
    if(!OpenDialog1->Execute())
     {
      // si aucune selection on quitte
      ShowMessage("aucun fichier selectionné arret du programme");
      return ;
      //Application->Terminate();
     }
     
     ///////////////////////////////////
    // ici on va charger la StringGrid avec le fichier
    AnsiString donneeCSV;
    TStringList *FichierCSV = new TStringList();
    FichierCSV->LoadFromFile(OpenDialog1->FileName);
     
    for(int i=1;i<FichierCSV->Count;i++)
    {
     donneeCSV=FichierCSV->Strings[i];
     X = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(";")-1));//récupère "Xi"
    donneeCSV.Delete(1,donneeCSV.Pos(";"));          //supprime "xi;"
    Y = StrToInt(donneeCSV.SubString(1,donneeCSV.Pos(";")-1));//récupère "Yi"
    donneeCSV.Delete(1,donneeCSV.Pos(";"));
    Z = StrToInt(donneeCSV);//récupère "Zi"
    Matrice[X][Y]= Z;
    }
    Pour l'optimisation ...

  13. #13
    Membre régulier Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 105
    Points
    105
    Par défaut
    Merci...

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

Discussions similaires

  1. charger des données avec SQL LOADER
    Par jeunot0108 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 21/08/2007, 08h52
  2. Réponses: 1
    Dernier message: 09/07/2007, 17h13
  3. Comment charger des données en mémoire à partir d'une BDD
    Par n@n¤u dans le forum Persistance des données
    Réponses: 2
    Dernier message: 20/02/2007, 11h53
  4. Réponses: 2
    Dernier message: 30/01/2007, 09h01
  5. Réponses: 1
    Dernier message: 15/12/2006, 14h04

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