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 :

Extraire des données d'un fichier .csv avec C++


Sujet :

C++Builder

Vue hybride

cre31400 Extraire des données d'un... 02/07/2008, 13h34
sat83 Bonjour, tu peux essayer de... 02/07/2008, 14h13
bandit boy Salut, oui c'est possible de... 02/07/2008, 14h19
cre31400 Alors merci déjà à vous deux... 02/07/2008, 15h46
cre31400 En fait , il me faudrait dans... 02/07/2008, 16h04
sat83 TStringList est (comme sont... 02/07/2008, 18h10
bandit boy Salut, Petit exemple: En... 03/07/2008, 16h29
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut Extraire des données d'un fichier .csv avec C++
    Bonjour,

    J'ai un fichier .csv, constitué d'un millier de lignes (dont presque la totalité est inutile pour moi) constituées de caractères ou coordonnées ( lattitude et longitude de 17 chiffres chacunes). Il me faut extraire parmi ces milliers de lignes une trentaine de ligne (correspondant aux coordonnées) séparées les unes des autres.

    Est-il possible de le faire avec C/C++ ?

    Par exemple, existe-t'il un programme qui me permet de détecter parmi tous les caractères présents dans ce texte, les séries de 17 chiffres, ce qui me sortirait directement les coordonnées (tous les autres caractères de ce texte sont des lettres , ou nombres de maximum 3-4 chiffres) ??

    Merci énormement pour votre aide, cela m'aiderait beaucoup.

    Chris

  2. #2
    Membre Expert
    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 : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Bonjour, tu peux essayer de te débrouiller avec deux TStringList (une qui contiendra l'ensemble des lignes du fichier, et l'autre qui contiendra chaque élément d'une ligne)...

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //definition du caractère de séparation du CSV  
       char separateurCSV = ',' ;
    //création du TStringList qui contiendra l'ensemble du fichier
      TStringList *fichier = new TStringList();
    //Chargement du fichier : chaque ligne du fichier sera dans une ligne du TStringList
      fichier->LoadFromFile( "D:\\essai.csv" ) ;
     
      TStringList *ligne ;
     
    //boucle sur chaque ligne du fichier
      for( int i=0; i< fichier->Count; i++ )
      {
        ligne = new TStringList() ;
      //chaque élement du TStringList 'ligne' contiendra 1 élement de la ligne i
        ligne->Text = StringReplace(fichier->Strings[i], separateurCSV , "\n", TReplaceFlags()<< rfReplaceAll );
      // on parcours chaque élement de la ligne  
        for(int j=0; j < ligne->Count; j++)
        {
           // on regarde si l'élement fais plus de 16 caractères
           if( ligne->Strings[j].Length() > 16 )
           {
               // Fais ce que tu veux avec tes codes de 17 caractères
               ShowMessage( ligne->Strings[j]) ;
           }
        }
        // libération des ressources 
        delete ligne ;
      }
      // libération des ressources 
      delete fichier ;
    }

  3. #3
    Membre émérite
    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
    Par défaut
    Salut,
    oui c'est possible de charger et de faire une recherche dans ton fichier.
    Pour ca, il faut que tu jettes un œil dans la FAQ pour ces deux points séparément, travaillons de manière structurée.

    Pour le chargement de ton fichier csv, regarde du côté des TStringList dans la FAQ et dans ce forum, il y a déjà eu énormément de sujet sur ce point.

    Pour ta recherche, il faut que tu manipules les AnsiString avec les méthodes .Pos() et autres ...

    Si tu coinces sur un de ces deux points, reviens poster
    Bon courage

  4. #4
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut
    Alors merci déjà à vous deux d'avoir répondu aussi vite!

    J'ai une question (oui je suis pas une flèche ..)
    -je comprends pas ce que fait exactement le TstringList? Ca sort toute une ligne de mon fichier .csv ?

    Ensuite, pour vous éclairer un minimum, les lignes que je veux extraires sont de cette forme :

    <coordinates>0.6903333333333334,42.92700000000001,0</coordinates>

    Moi je veux sortir en gros , lattitude[i] =0.69033333 longitude[i]=42.927000001

    Est-ce que le fait que les nombres soient collés à <coordinate> et ',' ne posera pas un problème dans le comptage des caractères?

    Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut
    En fait , il me faudrait dans un premier temps extraire les lignes commencant par <coordinate>, et de cette extraction en extraire les deux séries de chiffres (j'ai vérifié et les coordonnées sont parfois inférieures à 4 caractère ce qui fausse tout, je suis désolé de vous avoir donné de fausses infos..).

    C'est peut-être moins galère (ou plus facile) comme cela non ?

    Mercii

  6. #6
    Membre Expert
    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 : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par cre31400 Voir le message
    Alors merci déjà à vous deux d'avoir répondu aussi vite!

    J'ai une question (oui je suis pas une flèche ..)
    -je comprends pas ce que fait exactement le TstringList? Ca sort toute une ligne de mon fichier .csv ?
    TStringList est (comme sont nom l'indique) une liste de strings (=chaine de caractères). Tu peux soit gerer toi meme les chaine de caractère en utilisant Add, Delete ou Insert, soit utiliser la methode LoadFromFile qui chargera un fichier en le lisant ligne par ligne.

    Pour comprendre ce que fais un TStringList, un petit exemple illustratif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TStringList *essai = new TStringList() ;
    essai->LoadFromFile("C:\\MonFichier.csv");
    for(int i=0; i<essai->Count; i++)
    {
      ShowMessage("La ligne n° " + IntToStr(i) + " est:\n\n" + essai->Strings[i] ) ;
    }
     
    delete essai ;

    Sinon regarde dans l'aide (F1) ou tape TStringList sur Google tu aura plein d'exmeple

  7. #7
    Membre émérite
    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
    Par défaut
    Salut,
    Petit exemple:
    En globale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TStringList *FichierCSV;
    Dans ton 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
     
        int i=0;
     
        if(OpenDialog1->Execute())
        {
            FichierCSV = new TStringList();
            FichierCSV->LoadFromFile(OpenDialog1->FileName);
            while(i<FichierCSV->Count)
            {
                //si la ligne ne contient pas "<coordinate>", on la supprime
                if(FichierCSV->Strings[i].Pos("<coordinate>") == 0)
                {
                    FichierCSV->Delete(i);//supprime la ligne qui ne contient pas le texte
                    i--;//recale l'index, vu que le nombre de ligne à changé
                }
                i++;
            }
        }
    Du coup, dans FichierCSV il n'y a que les lignes avec "<coordinate>" dedans.
    Tu peux aussi utiliser la méthode .Pos() pour chercher autre chose. De la même manière, il existe .Delete() pour supprimer, .SubString() pour extraire une chaîne, .Insert() pour insérer des caractères...
    Essaye chacune des méthodes et appuie sur F1, tu auras plein d'info sur la manière de s'en servir.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut
    Merci beaucoup !! j'essairai cela lundi dès que j'aurai accès à mes programmes! mais ça à l'air bon comme ca!!! merci beaucoup !!

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

Discussions similaires

  1. [XL-2007] Extraire des données d'un fichier Xml avec des balises identiques
    Par Danieldu54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/03/2011, 20h45
  2. [Batch] Extraire des données d'un fichier CSV
    Par soufianekh dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 27/10/2009, 13h34
  3. Extraire des données d'un Fichier .csv
    Par wolverine1987 dans le forum MFC
    Réponses: 47
    Dernier message: 20/05/2009, 15h48
  4. Réponses: 14
    Dernier message: 16/07/2008, 11h47
  5. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48

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