Nombre de ligne métode non bourrine (C)

Résolu
cap'tain sheeps -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut,
Je cherche à compter le nombre de ligne d'un fichier jusqu'à ce que l'on atteint "ELEMENT DE BASE" (écris dans ce fichier à 7 caractères du début de la ligne).
J'ai fais de cette façon mais je me demandais si il n'y avait pas une manière plus "fine" et propre. (je parle du else if caractère par caractère, la j'ai réduis le programme mais sinon je ferme mon fichier et tout et tout vous inquiétez pas )

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#define TAILLE_MAX 1000 

int main(int argc, char *argv[]) 
{ 
    FILE* fichier = fopen("exemple.PRF", "r"); 
    char carac; 
    char string[TAILLE_MAX]; 
    int i; 
    int ligne = 0; 
    for (i = 0; i<7; i++) 
    { 
        fgetc (fichier); 
    } 
    for (i = 0; i<200; i++) 
    { 
        carac = fgetc (fichier); 
        if (carac != 'E') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else if ((carac  = fgetc (fichier)) != 'L') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else if ((carac  = fgetc (fichier)) != 'E') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else if ((carac  = fgetc (fichier)) != 'M') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else if ((carac  = fgetc (fichier)) != 'E') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else if ((carac  = fgetc (fichier)) != 'N') 
        { 
            fgets(string,TAILLE_MAX,fichier); 
            ligne++; 
        } 
        else
        {
            printf("nb ligne : %d",ligne);
            return 0;
        } 
    } 
    return 0; 
} 



Merci d'avance !
Sheeps.



A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Oui, il y a beaucoup plus fin ^^.
Par exemple :
#define MAX 512

int main (void) {
  FILE *fp=fopen(...);
  int ligne=0;
  int trouve=0;
  char buffer[MAX];
  while(fgets(buffer, sizeof buffer, fp)) {
       ligne++;
       if(strstr(buffer,ELEMENT DE BASE)) {
          trouve=1;
          break;
       }
  }
  if(trouve) printf("%d\n", ligne);
  fclose(fp), fp=NULL;
  return 0;
}

J'ai pas vérifié, il y a sûrement des erreurs. A toi de voir pour la taille maximum des lignes. S'il n'y a pas de maximum, il faudra faire un petit while(fgetc) jusqu'à la fin de ligne.

Cdlt,
1
cap'tain sheeps
 
Merci bien!

Mmmmhhh bisarre trouve est toujours à 0...
enfin je me suis permis de mettre des guillemets pour "ELEMENT DE BASE", vu que sinon il me disait:

'ELEMENT' undeclared

mais bon je connais pas la fonction strstr. Une idée?
0
cap'tain sheeps
 
J'ai rien dis...
En fait c'était "EQUIPEMENT DE BASE" et pas ELEMENT...
Faut toujours qque je trouve l'erreur la plus stupide à faire moi ...

Merci beaucoup ! En plus tu m'as appris une fonction qui va m'être utile ;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui, il faut mettre des guillemets. Petite étourderie de ma part.
Oui, strstr est très utile :-).
0