[c++] extraction dans un fichier

Résolu/Fermé
James56 Messages postés 161 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 1 avril 2022 - 26 sept. 2007 à 03:25
mamiemando Messages postés 33307 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 octobre 2024 - 1 oct. 2007 à 13:52
salut a tous

j'ai un petit probleme que je n'arrive pas a resoudre.

j'ai un fichier ou le donné sont inscrite comme ceci :


blableblilbob
blableblilbobblableblilbob
blablabla (machin) [5:3:26]
blabli (truc) [45:6:2]
...
..

je voudrais isoler dans un autre fichier les terme entre ( ) et entre [ ] qui figure sur la meme ligne :

(machin) [5326]
(truc) [4562]


je suit debutatnt dans la programmation
sa fait un moment que je planche sur la question et sa commence vraiment a me ...!#@%!!.
j'ai essayer de chercher des solution sur le web mais je n'ai pas reussit a addapter ce que j'ai trouver a ma situation.

je remerci tout personnes pouvant m'eclaircire la situation.
A voir également:

5 réponses

James56 Messages postés 161 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 1 avril 2022 16
27 sept. 2007 à 02:51
personne peu m'aider ?
0
James56 Messages postés 161 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 1 avril 2022 16
29 sept. 2007 à 04:27
vraiment personne ?
0
mamiemando Messages postés 33307 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 octobre 2024 7 794
29 sept. 2007 à 15:24
Le plus simple c'est de travailler avec des expressions régulières avec la lib pcre. Mais si tu débutes c'est pas forcément évident. On va donc utiliser les string en s'inspirant des méthodes décrites ici :
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583

On retiendra
- l'utilisation de la méthode find
- l'utilisation du champ std::string::npos (fin de chaîne)
- l'utilisation du constructeur prenant un tronçon de chaîne

Voici la solution que je te propose
#include <string>
#include <fstream>
#include <iostream>

int main(){
    std::ifstream f_in("fichier.txt");
    if (f_in){
        std::string line;
        while(std::getline(f_in,line)){
            const unsigned
                pos_par_gauche = line.find('('),
                pos_par_droite = line.find(')'),
                pos_cro_gauche = line.find('['),
                pos_cro_droite = line.find(']');
            // Vérifier qu'on a trouvé les 4 caractères
            if(pos_par_gauche == std::string::npos
            || pos_par_droite == std::string::npos
            || pos_cro_gauche == std::string::npos
            || pos_cro_droite == std::string::npos) continue;

            // Vérifier que leur position est cohérente
            if(pos_par_droite < pos_par_gauche
            || pos_cro_droite < pos_cro_gauche) continue;

            // Extraire les chaines comprises entre () et []
            const std::string
                str_par(line,pos_par_gauche+1,pos_par_droite-pos_par_gauche-1),
                str_cro(line,pos_cro_gauche+1,pos_cro_droite-pos_cro_gauche-1);
            std::cout << "str_par = " << str_par << std::endl
                << "str_cro = " << str_cro << std::endl;
        }
        f_in.close();
    }
    return 0;
}

Ensuite on écrit le fichier d'entrée. Dans le programme j'ai mis en dur fichier.txt, arrange ça à ton idée. Voici le contenu du fichier.txt que j'ai utilisé :
(mando@polgara) (~) $ cat fichier.txt
bleblilbob
blableblilbobblableblilbob
blablabla (machin) [5:3:26]
blabli (truc) [45:6:2]

Ensuite on compile (là je suis sous linux mais sous windows c'est le même principe)
(mando@polgara) (~) $ g++ -W -Wall -o plop.exe plop.cpp

Et on exécute :
(mando@polgara) (~) $ ./plop.exe
str_par = machin
str_cro = 5:3:26
str_par = truc
str_cro = 45:6:2

Bonne chance
0
James56 Messages postés 161 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 1 avril 2022 16
1 oct. 2007 à 00:14
je te remercie pour ta reponse c'est vraiment sympas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33307 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 octobre 2024 7 794
1 oct. 2007 à 13:52
Pas de soucis, à bientôt ;)
0