Dans le cadre d'un projet à l'école, je dois, dans mon code charger une image de type PNM et réécrire le contenu de cette image sur un fichier.
Mon problème provient lors de la lecture du fichier. Dans ce type de fichier il y a parfois une ligne de commentaire commençant par le symbole #, et je voudrai lire le fichier tout en ignorant cette ligne. Donc, je voudrai trouver une fonction capable d'ignorer cette ligne et qui fasse un saut de ligne pour que je puisse continuer ma lecture de fichier avec fscanf. J'espère que j'ai été assez claire..
Merci d'avance pour votre aide.
J'ai trouvé ça sur le net mais ça ne fonctionne pas..
Qu'est-ce que ça veut dire "ça ne fonctionne pas" ?
Ce sont des lignes qui font exactement ce qu'elles décrivent. Et elles ne sont pas là pour lire l'image dans le fichier. Le problème vient peut être de la manière de les employer.
Merci de votre réponse. Voici un exemple de comment je lis une des lignes de mon fichier, je lis donc ligne par ligne.
static void get_nombre_colonnes_lignes_PNM(PNM *img, FILE *fp){
assert(img != NULL);
fscanf(fp, "%d %d", &img->nombre_colonnes_PNM, &img->nombre_lignes_PNM); //Lit et charge en mémoire le nombre de colonnes et lignes
}
Ensuite, dans une autre fonction qui est ma fonction principale, j'utilise la fonction ci-dessus mais je cherche à trouver une fonction à placer juste avant dans le cas où la ligne est un commentaire.
- Edité par FrançoisDemaret 23 mars 2018 à 13:55:31
char buf[BUFSIZ];
FILE *f = fopen(...);
//...
//Si 1er caractere de la ligne est '#' alors on ignore la ligne
while(fgets(buf, sizeof buf, f) && *buf == '#')
;
//...
Une autre idée que celle de magma: puisque tu utilises fscanf(), emploie sa valeur de retour: si le nombre de lecture correcte vaut zéro, on peut supposer que la ligne est une ligne comentaire. Plus qu'à lire jusqu'à la fin de la ligne (trouver le \n)
EDIT: tout compte fait, la solution de magma est la meilleure: si le 1er char est un #, on passe la ligne, sinon il faut la scanner avec sscanf()
- Edité par edgarjacobs 23 mars 2018 à 14:23:27
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Sauter une ligne de commentaire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent