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++ Discussion :

----->>>Extraire les chaine separer par des S�parat


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut ----->>>Extraire les chaine separer par des S�parat
    Bonjour
    En faite j'ai r�ussi � cr�e ouvrir est lire et affich� le contenu du fichier.

    Mais je voulais savoir comment je pourai extraire les chaine qui sont dans

    le fichier s�parer par des point virgule : pij;pij2..... et puis la ligne

    suivante:

    et les affect� � des variables dans mon programmes chaine r�cuperer = str1 .....
    MErci d'avance pour toutes aide ou suggestion

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Une solution C : faire un fread, un strstr sur ton s�parateur et affecter le r�sultat dans ton tableau de cha�nes. Tout cela bien s�r dans une boucle de lecture de ton fichier.
    Avec les MFC sinon, charge tout dans une CString et utilise les m�thodes qui existent d�j� dans cette classe (�a sera plus simple qu'avec du strstr).
    Je ne sais pas si c'est vraiment un probl�me C++

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut infos
    MErci pour ton aide

    Mais est e que tu px �tre plus claire car sinc�rmenet j'ai essay� mais j'ai rien retenu de l'explication .

    Peut �tre que ta besoin de plus d'infos: je crois qu'il existe une fonction on lui renseigne le s�parateur " ; " et elle extrait les chaines .

    MAis je connais pas la fonction ni comment m'en servire .

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Alors on va commencer par le d�but, c'est du C ou du C++ ton programme ? Il y a des contraintes fonctionnelles ? C'est un module ind�pendant ? Qu'est-ce que tu utilises comme outil de d�veloppement, Visual C++, Borland C++, Visual 2005 ?

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Peut �tre que ta besoin de plus d'infos: je crois qu'il existe une fonction on lui renseigne le s�parateur " ; " et elle extrait les chaines
    La fonction strstr fait ceci, plus pr�cisement, elle renvoie un pointeur vers la cha�ne.
    Ensuite, les objets manipulant les cha�nes de caract�res ont en g�n�ral une m�thode qui fait ce traitement.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut infos
    je developpe par Visual C++

    POUR les contraintes non ya pas de contraintes c'est des chaine qui sont introduit par un technicien separer par des " ; "
    et que je dois r�cuperer dans mon programmes

    Sinon pour ta fonction "strstr " est ce que tu px me donner ces options genre comment lui renseign� mon separateur " ; "

    MErci

  7. #7
    Membre �m�rite

    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2005
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par d�faut
    En C++, on peut bien plus simplement profiter de std::getline qui fonctionne avec les string standards.

    Un exemple qui affiche s�paremment tous les string s�par�s par ';' :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    std::ifstream file("file.txt");
     
    if(file)
    {
        std::string line;
     
        while(std::getline(file, line, ';') )
        {
            std::cout << "Mot: " << line << std::endl;
        }
    }
    Voil�

  8. #8
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  9. #9
    Membre �m�rite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    F�vrier 2004
    Messages
    644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Consultant ERP

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 644
    Par d�faut
    S'agit-il d'un simple fichier contenant quelques chaines de caract�res s�par�es par un ';' ou est-ce qu'il s'agit de lire un fichier CSV ?

    Si c'est le cas, il faudra lire la ligne avec std::getline, et ensuite , splitter la ligne avec un s�parateur.

    En fait cela revient vraiment � la m�me chose, � part que la deuxi�me solution, pourrait recevoir un std::string en input et sortir un std::vector< std::string >

    Simple id�e.

  10. #10
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut infos
    Non c'est seulement un fichier texte

  11. #11
    Membre �m�rite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    F�vrier 2004
    Messages
    644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Consultant ERP

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 644
    Par d�faut
    Tout fichier autre que Binaire sont des fichiers textes :p
    Un fichier CSV est un fichier texte.
    D�finition de CSV par Wikipedia !

  12. #12
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut infos
    en faite if ( file) c'est le test d'existance du fichier (file = son non )

    pour :

    while(std::getline(file, line, ';') ) : elle affiche chaque caract�re apr�s le " ; "

    Mais si je vx le r�cuperer dans une autre chaine je f� �a :

    strcpy ( chaine 1, Mot [1 (premier mot )]

    MERci pour v�tre reactivit�

  13. #13
    Membre �m�rite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    F�vrier 2004
    Messages
    644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Consultant ERP

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 644
    Par d�faut
    oul�, attend deux secondes.

    Voici un exemple de code qui pourra certainement mieux t'aider.

    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
     
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <string>
     
    typedef std::vector< std::string > StringList;
    typedef std::list< StringList > MultiStringList;
     
    StringList splitLine (const std::string &buffer, const std::string &separator )
    {
        StringList result;
        std::string textToProcess (pText);
     
        std::string::size_type pos (textToProcess.find (pSeparator));
        while (pos != textToProcess.npos) {
            result.push_back (textToProcess.substr (0, pos));
            textToProcess = textToProcess.substr (pos + pSeparator.size ());
            pos = textToProcess.find (pSeparator);
        }
        if (! textToProcess.empty()) {
            result.push_back (textToProcess);
        }
        return result;
    }
     
    int main (int argc, char **argv) {
        std::ifstream inputFile ("fichier.csv");
        if (inputFile) {
            std::string buffer;
            MultiStringList listString;
            while (std::getline (inputFile, buffer)) {
                listString.push_back (splitLine (buffer, ";"));
            }
            MultiStringList::const_iterator itFirst = listString.begin ();
            int LineCount = 0;
            for ( ; itFirst != listString.end (); ++itFirst) {
                std::cout << "Ligne : " << (++LineCount) << std::endl;
                StringList::const_iterator itSecond = itFirst.begin ();
                int FieldCount = 0;
                for ( ; itSecond != itFirst.end (); ++itSecond) {
                    std::cout << "Champ[" << (++FieldCount) << "] : " << *itSecond << std::endl;
                } 
            }
        }
    }
    Voici un exemple de code qui lit chaque ligne d'un fichier texte et qui splitte chaque ligne pour obtenir chaque mot se trouvant entre des s�parateurs.

    C'est de cette mani�re qu'on peut lire les fichiers CSV tr�s simple et bas� sur ';' comme s�parateur.

  14. #14
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut ----->>>> INFOS<<<------
    Merci pour ton exemple de code

    je voulais seulement te demander pour la ligne :

    std::ifstream inputFile ("fichier.csv"); entre paranth�se je dois renseign� le chemin du fichier texte que j'ai d�ja cr�e dans mon programme avec :
    //////////////////////////////////////////////////////////////////////////
    Ouvrir fichier texte
    h_fic = open ("c:\\test.txt ", O_CREAT);
    /* Test si fichier ouvert */
    if (h_fic == -1)
    {printf ("Impossible d'ouvrir le fichier");
    getch ();
    return (1);
    }

    while (!eof (h_fic))
    {
    /* Lecture de 80 octets maximum */
    nb_car_lus = read (h_fic, ligne, 10); /* afficher 10 caract�re par ligne */

    /* Ecriture de ce qui a �t� lu */
    for (i=0; i<nb_car_lus; i++)
    {
    printf ("%c",ligne [i]); /*Lire tous le contenu*/
    //////////////////////
    Ou dois-je mettre le code que tu ma passer .

    MErci d'avance

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Par d�faut

  16. #16
    Membre �m�rite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    F�vrier 2004
    Messages
    644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Consultant ERP

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 644
    Par d�faut
    L'exemple que tu donnes ne me semble pas correcte, car tu cr�es le fichier, � moins que je me trompe, cela fait +- 10 ans que je n'ai plus employ� 'open'.

    Je pense que ton code ne refl�te pas ton id�e.

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Par d�faut ------>>> infos <<<<-------
    En faite come je te l'es dis
    il faut ouvrir ou c�e puis lire at apr�s commenc� � segment� selon le point virgule " ; "
    .

Discussions similaires

  1. R�ponses: 3
    Dernier message: 04/11/2012, 03h11
  2. R�ponses: 5
    Dernier message: 13/04/2010, 11h50
  3. R�ponses: 6
    Dernier message: 11/05/2007, 21h51
  4. R�ponses: 2
    Dernier message: 19/12/2005, 21h08
  5. R�ponses: 6
    Dernier message: 30/09/2005, 19h55

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