Nombre de ligne métode non bourrine (C)
Résolu
cap'tain sheeps
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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 )
Merci d'avance !
Sheeps.
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.
3 réponses
-
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, -
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? -
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 ;)