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

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    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
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    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
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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 éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    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à
    Fiquet
    - FAQ SDL
    - FAQ C++

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  9. #9
    Membre éclairé
    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
    Points : 785
    Points
    785
    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.
    Nul ne peut mieux connaitre la connaissance qu'elle-même.

  10. #10
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

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

  11. #11
    Membre éclairé
    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
    Points : 785
    Points
    785
    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 !
    Nul ne peut mieux connaitre la connaissance qu'elle-même.

  12. #12
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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 éclairé
    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
    Points : 785
    Points
    785
    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.
    Nul ne peut mieux connaitre la connaissance qu'elle-même.

  14. #14
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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 régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut

  16. #16
    Membre éclairé
    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
    Points : 785
    Points
    785
    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.
    Nul ne peut mieux connaitre la connaissance qu'elle-même.

  17. #17
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    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. Recherchez les noms débutant par des chriffres ou des /[% ..
    Par jack1234 dans le forum Langage SQL
    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