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 :

C++ besoin d'un coup de main


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut C++ besoin d'un coup de main
    donc voila je dois faire un ptit programme en C++, mais je me prends la tete depuis ce matin dessus.

    en gros je recois sa d'un automate:
    EH07H52 28/03/06
    I01/34/0 04//0
    ED07H56 28/03/06
    ....
    ( plusieurs lignes entre, du meme type )
    ....
    I02//0 06/825/0
    EH08H57 28/03/06
    I01//0
    EC09H01 28/03/06
    de sa je dois extraire les ligne suivante :

    la premiere ligne "EH" recue et la derniere recue et les sauvegarder dans un buffer ( BufferInfo[512] )
    je dois recuperer aussi les ligne 'I' mais seulement la valeur contenue entre les doubles '/'
    ( exemple :
    I01/34/0 04/4/0
    I01//0 04/800/0
    ^- ici les valeurs en rouge )
    mais par moment il n'y a pas de valeur et quand il y en a une, elle peut etre de plusieurs caractere, et je peux avoir plusieurs double '/' dans une ligne 'I'

    merci

  2. #2
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Je pense que ton problème tient plus de l'algorithmique que du C++...
    Ce qu'il te faut, c'est un algorithme, relativement simple dans ton cas. Par la suite, il te faudra transformer l'algorithme en C++, et c'est pour que tu puisses résoudre, ainsi que tout autre personne en "détresse", les éventuels problèmes relatifs au C++ que ce forum existe.
    Je te conseille donc de contacter un modérateur afin de le prier de déplacer ton post vers le forum d'algorithmie, où l'on sera apte à te fournir une démarche peut-être plus poussée que celle que l'on te décrirait ici.
    A+

  3. #3
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Bon, en gros c'est ç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
     
    1. parcourir le fichier texte contenant les données.
       a) insérer chaque ligne dans une chaîne de type string (tu peux utiliser      "getline")
     
    2. parcourir chaque ligne
       a) vérifier si la ligne sélectionnées comporte une chaîne quelquonque, à l'exemple de "EH" ou "I"
          a) pour toutes lignes contenant "EH", insérer ces dernières dans la
              variable BufferInfo[512]
          b) pour toutes celle commençant par "I", parcourir, caractère par
              caractère*, jusqu'à tomber sur un slash
               a) observer le caractère suivant
                   a) si c'est un second slash, on abondonne
                   b) si ce n'est pas un slash, copier tous les caractère jusqu'au
                       porchain slash dans une variable quelconque.
    Evidemment, ce n'est pas complet...
    Comment se fait-il que dans l'expression suivante, "0 04" ne doive pas être récupérée?
    I01/34/0 04/4/0
    A+



    *pour cela, tu peux avoir recours au char[] pour te simplifier la vie.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par reggae
    Bon, en gros c'est ça:
    [code]
    1. parcourir le fichier texte contenant les données.
    a) insérer chaque ligne dans une chaîne de type string (tu peux utiliser "getline")

    2. parcourir chaque ligne
    a) vérifier si la ligne sélectionnées comporte une chaîne quelquonque, à l'exemple de "EH" ou "I"
    a) pour toutes lignes contenant "EH", insérer ces dernières dans la
    variable BufferInfo[512]
    b) pour toutes celle commençant par "I", parcourir, caractère par
    caractère*, jusqu'à tomber sur un slash
    a) observer le caractère suivant
    a) si c'est un second slash, on abondonne
    b) si ce n'est pas un slash, copier tous les caractère jusqu'au
    porchain slash dans une variable quelconque.
    oui sa je suis d'accord, j'en été arrivé la mais je n'arrive pas a recuperer le contenu entre les slash etant novice j'utilise mal certaine methode ou n'en connais pas suffisament

    Comment se fait-il que dans l'expression suivante, "0 04" ne doive pas être récupérée?
    01/34/0 04/4/0 : ce sont deux ensembles de parametres differents groupés par trois
    le premier = 01/34/0 et le second 04/4/0 et seule la valeur du milieu m'intéresse pour chaque groupement

  5. #5
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Pour commencer, tu peux utiliser des char[].
    Tu crées une boucle en utilisant une condition comme celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(caractere[i]!='/')
    {
    ...
    i++;
    }
    La boucle s'arrêtera lorsqu'elle atteindra le / qui se trouve dans la chaîne "caractere"...
    Ensuite, tu observes "i+1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(caractere[i+1]!='/')
    {
       while(caractere[i]!='/')
       {
         //insérer le caractère lu dans une autre chaîne
        i++;
       }
    }
    Si le "if" échoue, on continue à parcourir la chaîne, jusqu'au prochain / et on recommence le test précédent...

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Citation Envoyé par reggae
    Bon, en gros c'est ç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
     
    1. parcourir le fichier texte contenant les données.
       a) insérer chaque ligne dans une chaîne de type string (tu peux utiliser      "getline")
     
    2. parcourir chaque ligne
       a) vérifier si la ligne sélectionnées comporte une chaîne quelquonque, à l'exemple de "EH" ou "I"
          a) pour toutes lignes contenant "EH", insérer ces dernières dans la
              variable BufferInfo[512]
          b) pour toutes celle commençant par "I", parcourir, caractère par
              caractère*, jusqu'à tomber sur un slash
               a) observer le caractère suivant
                   a) si c'est un second slash, on abondonne
                   b) si ce n'est pas un slash, copier tous les caractère jusqu'au
                       porchain slash dans une variable quelconque.
    Le 1) sert pas à grand chose, si ce n'est utiliser plus de mémoire et faire plus d'opérations.
    Boost ftw

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    L'automate te transmet un flot de données organisées en séquences.ok!
    Mais qu'est ce qui distingue les séquences les unes des autres?
    Réponse: le caractère espace !

    Tu es donc en face d'un motif dont on détecte la fin par la présence du caractère espace dans le flot et qui est constitué de 2 slash.

    On peut alors envisagé un algorithme du genre:
    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
     
    boolean semaphore= false;
    char[]  data="";
     
    répéter 
     si EH trouvé alors sauvegarder ligne 
     sinon
          tant que espace non trouvé
          faire
               lire caractere;
               si semaphore = true alors data += caractere;
               si (caractere='\' et semaphore=false) alors semaphore=true;
               sinon semaphore = false;
          fin de tant que.   
    pour chaque séquence du flot.
    Comment fonctionne l'algo?
    A la rencontre du 1er slash on positionne le semaphore à true.-> Nous venons d'entrer dans la zone de données que l'on doit récupérer.
    A la rencontre du 2eme slash on bascule le sémaphore à false.->Nous venons de quitter la zone de données qui nous intéressait.

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut


    1. std::string ! puis écrire une fonction type split (exemple dans la FAQ)
    2. ou utiliser une librairie qui gère déjà ça (boost -> tokenizer)

Discussions similaires

  1. [webdesign] Je dois reconstituer un frame : besoin d'un coup de main
    Par dom J dans le forum Balisage (X)HTML et validation W3C
    Réponses: 24
    Dernier message: 21/08/2006, 00h24
  2. [RegEx] Besoin d'un coup de main pour écrire une regex
    Par gaboo_bl dans le forum Langage
    Réponses: 7
    Dernier message: 18/08/2006, 17h53
  3. Besoin d'un coup de main avec print
    Par scaleo dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2006, 21h12
  4. Problème avec fwrite() : besoin d'un coup de main
    Par yopuke dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2006, 09h43
  5. besoin d'un coup de main pour une requête ;)
    Par Fabouney dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 23h14

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