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 :

lecture d'un fichier texte


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut lecture d'un fichier texte
    salut tt le monde,

    dans mon application, je lis un fichier texte qui ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Name          OpSys       Arch   State      Activity   LoadAv Mem   ActvtyTime
     
    FR20023738.co WINNT51     INTEL  Unclaimed  Idle       0.000  1016  0+01:20:00
    FR20041685.co WINNT51     INTEL  Unclaimed  Idle       0.170  1016  0+01:05:04
     
                         Machines Owner Claimed Unclaimed Matched Preempting
     
           INTEL/WINNT51        2     0       0         2       0          0
     
                   Total        2     0       0         2       0          0
    Je desire récupérer les informations contenues dans les lignes du milieu (celles qui commencent par FR200...). Sachant que le nombre de ces lignes est variable et que leur nombre est indiqué par Total. J'ai donc écrit un bout de code pour retrouver ce total :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fseek( pFile, 0L, SEEK_SET );
    	int poolSize;
    	char buffer[100];
    	while (fscanf(pFile,"%s", buffer)!=EOF)
    	{
    		if (strcmp(buffer, "Total") == 0)
    			fscanf(pFile, "%d", &poolSize);
    	}
    Par contre, je bloque sur la manière de récupérer les lignes en question, puis leur découpage...

    J'ai écrit cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char line[100];
    	int lCount = 0;
     
    	while ( fgets(line, 100, pFile) )
    	{
    		if (lCount >= 3 && lCount <= 3+poolSize)
    		{
    			istringstream iss( line );
    		}
     
    		++lCount;
    	}
    Mais ca ne marche pas... Et puis de toute facon, je sais pas comment mettre la ligne courante dans une variable sachant que le nb de ligne (et donc le nombre de variable est inconnue avant l'execution du programme)


  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Points : 79
    Points
    79
    Par défaut
    Salut !

    Perso, je pense que je commencerais par recuperer une ligne complete ( jusqu'au \n ), et pas champ apres champ ( ce que fait le %s ) , ensuite, sur les lignes commençants par "FR2" ( celles que tu veux ), tu fais un scanf ( ou autre ) avec un truc du style "%s %s %s ..." pour recuperer les champs que tu cherche ( WINNT51 INTEL Unclaimed Idle 0.000 1016 0+01:20:00 )

    Et le "total" ne sert à rien à mon avis ... ...

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Le petit probleme c'est que les lignes que je veux récupérer ne commencent pas forcément par FR200.., il s'agit d'un hostname, qui peut etre amené a changer... La ou le Total est utile c'est que je sais que je dois commencer à récupérer les lignes à partir de la ligne 3 du fichier (c'est une constante) et donc si je connais le nombre de lignes a récupérer, ca marche?

    Le problème, c'est que ne sachant pas au moment de l'écriture du programme le nombre de ligne que j'aurais a récupérer, je ne peux pas initialiser des variables (CString) pour y mettre les lignes en questions, car on ne peut pas que je sache créer des variables dynamiquement à l'execution?!???

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Points : 79
    Points
    79
    Par défaut
    Bon, reprenons plus calmement, je ferais mon post pour mon pb un autre jour ...

    ...

    Tu as un fichier qui ressemble à ce que tu as posté ... Et tu veux retrouver les infos dans les lignes commençants par "FR", mais ce patern de recherche peut changer, il faut donc trouver un autre test ...

    Ton fichier commence toujours par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Name          OpSys       Arch   State      Activity   LoadAv Mem   ActvtyTime
     
    [...]
    C'est pour ça je pense que tu parlais d'ignorer les 3 premieres lignes ...

    Si toutes les lignes de données se suivent, ton test de fin de liste pourra etre que la ligne n sera vide, n commençant à 3 ( on est juste avant le "Machines Owner Claimed Unclaimed Matched Preempting" ... )

    La colone "Name" des lignes de données est la seule à ne pas commencer par un espace ... c'est peut etre aussi un autre angle d'approche ...

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut
    Déja j'ai trouvé pouquoi ca ne marchait pas. Voila mon code corrigé:

    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
    	char s1[20],s2[20],s3[20],s4[20],s5[20],s6[20],s7[20],s8[20];
    char line[100];
    	int lCount = 0;
     
    	fseek( pFile, 0L, SEEK_SET );
     
    	while ( fgets(line, 100, pFile) )
    	{
    		if (lCount >= 3 && lCount < 3+poolSize)
    		{
    			istringstream iss( line );
    			sscanf(line, "%s%s%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6,s7,s8);
    		}
     
    		++lCount;
    	}
    j'oubliais de recommencer au début du fichier. Cette fois, je récupère bien les lignes que je veux et je fais le découpage de chaque ligne... et j'ajoute chaque élément dans un CListCtrl. Je sais pas si cela est tres propre mais ca marche alors....

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Points : 79
    Points
    79
    Par défaut


    ça m'a l'air pas mal du tout, fellicitations ...

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

Discussions similaires

  1. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17
  2. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04
  3. [C#] Lecture d'un fichier texte (farfelu)
    Par choas dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h33
  4. Lecture d'un fichier Texte
    Par jcharles dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/10/2004, 14h58
  5. Stockage de données & lecture d'un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/03/2004, 14h05

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