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

MFC Discussion :

[MFC] Chaine dans un fichier txt


Sujet :

MFC

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Points : 24
    Points
    24
    Par défaut [MFC] Chaine dans un fichier txt
    Bonjour à tous !

    Pour les besoins de mon projet je dois aller chercher une chaine de caractère qui se trouve à la 8eme ligne et au 3eme caractère, et la stocker dans une variable.
    Du type : V=3xxx# avec xxx variable que je dois récupérer.
    J'ai utilisé le code suivant :
    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
     
     char Tamp[200] ;
     FILE* fichier = NULL;
     fichier = fopen("param.DAT","r+");
     
     if (fichier == NULL)
     {
      AfxMessageBox("Le fichier param.dat doit être dans le même répertoire que l'application");
     }
     else
     {
      for(int i=1 ; i <=9  ; i++)
       fgets(Tamp,200,fichier);//aller a la 8eme ligne 
     
      for(int i=0 ; Tamp[i] != '=' ; i++)
       Tamp[0] = fgetc(fichier) ;//aller jusqu'au caract
     
      for(int i=0 ; Tamp[i] != '#' ; i++)
       Tamp[i] = fgetc(fichier) ;
     
      Seuil_PenteTQ = Tamp ;
     }
     fclose(fichier) ;
    J'obtiens bien quelquechose mais rien qui correspond avec ce que j'attends.
    Merci de me dire ce qui ne va pas ou éventuellement une autre solution.

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Points : 49
    Points
    49
    Par défaut
    Edit : j'ai fait une erreur : voir mon message juste après ...

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Points : 65
    Points
    65
    Par défaut
    Salut,
    je crois voir deux choses :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for(int i=1 ; i <=9  ; i++)
       fgets(Tamp,200,fichier);//aller a la 8eme ligne
    avec ce code, tu ne recherches pas la 8 ème ligne (sauf si tes lignes ont une longueur fixe de 199 caractères + fin de ligne). Il faut que tu recherches 7 fois les caractères "\r\n"

    2) je pense que tu veux stocker la valeur 3xxx dans Seuil_PenteTQ. Ici, c'est l'adresse du tableau contenant la chaine de caractères représentant la valeur que tu mémorises. Il te faut extraire la valeur. Je m'orienterai vers 'strtod' ou 'sscanf' pour faire cela. edit: en ayant pris soin de rajouter le caratère de fin de chaîne en 'Tamp[i]' !


  4. #4
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Points : 49
    Points
    49
    Par défaut
    J'avais pas fini :
    Je pense que cette solution peut marcher :


    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
     
    CStdioFile fichier;
    CString ligne_lue;
    // Ouverture du fichier dans le répertoire de l'application
    if (fichier.Open(cfd.GetPathName(),CFile::modeRead))
    {
    MessageBox("ouverture de fichier réussie",NULL,MB_OK);
    // on va jusqu'à la 8ème ligne
    For (i=0;i++;i<8)
    {
    fichier.ReadString(ligne_lue);
    }
    // on prend la chaine de caractère après le 3ème carac de la ligne
    ligne_lue.Right(ligne_lue.GetLength()-3);
    }
    fichier.Close();
    return ligne_lue;
    Remarque : mon code utilise les classes CStdioFile et CString de MFC, donc c'est mieux si tu travailles en MFC

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 67
    Points : 24
    Points
    24
    Par défaut
    Aymerick j'ai pas essayé ce que tu m'as dit.
    A prioris ca avait l'air quand même d'aller a la ligne que je lui demandai, puisque les lignes sont toutes inférieures a 200 caractères et il s'arrête en fin de chaîne.
    Sinon c'est vrai que Seuil_PenteTQ = Tamp ; avait l'air douteux mais bon...

    sinon ca marche bien maintenant, j'ai transformé le ligne_lue.Right(ligne_lue.GetLength()-3); en :

    Seuil_PenteTQ = ligne_lue.Right(3) ;
    Seuil_PenteTQ = Seuil_PenteTQ.Left(2) ;

    pour récupérer le 31 de V=31#

    Voila

    Merci beaucoup !!!

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Points : 65
    Points
    65
    Par défaut
    effectivement, fgets s'arrête sur le caractère de fin de ligne...

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

Discussions similaires

  1. Recherche chaine de caractère dans un fichier txt
    Par 4rocky4 dans le forum Débuter
    Réponses: 11
    Dernier message: 31/12/2010, 17h29
  2. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  3. Réponses: 1
    Dernier message: 22/04/2009, 22h39
  4. Réponses: 2
    Dernier message: 02/09/2008, 14h17
  5. Réponses: 10
    Dernier message: 05/10/2004, 11h28

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