Manipulation de chaines dans un fichier [C] - C - Programmation
Marsh Posté le 16-07-2008 à 15:53:28
Petites remarques préalables :
Il manque fopen (en mode texte) et fclose.
Et comme toutes les fonctions commencent par la lettre "f" j'utiliserais fgetc au lieu de getc pour des raisons d'esthétisme.
La solution habituelle n'est pas le panachage de fgets et fgetc, mais de n'utiliser que l'un ou l'autre, par exemple une boucle avec un fgets et une boucle pour traiter la ligne ramenée par fgets. Ou même plus simplement, si le fichier n'est pas gigantesque, on le lit d'un seul coup en mémoire par un fread et on traite le buffer en mémoire à la recherche des tokens ad hoc .
Marsh Posté le 16-07-2008 à 16:08:45
J'ai pas compris quelle est la condition pour que le nombre de la ligne soit pris. Dans ton exemple tu prends celui de "Toto2 habite..." mais dans ton code tu ne le prends que si ça commence par "Toto habite...".
Sinon :
sizeof(char) est toujours égal à 1.
À mon avis fseek() ne fonctionnera pas, mets juste la ligne courante dans un buffer et travaille dessus.
Fais attention au fait que fgets() laisse le '\n' dans la chaîne lue si il y a assez de place.
Pour lire le nombre utilise strtol().
Marsh Posté le 16-07-2008 à 16:19:43
olivthill,
J'ai tronqué mon code et effectivement, j'avais mis fopen et fclose (c'est pas nécessaire mais c'est bien apparemment )
J'ai avancé depuis tout à l'heure et je crois que j'ai trouvé mon bonheur dans la fonction sscanf.
Code :
|
Par contre, je retombe dans le problème soulevé par dap++, il faut que je récupère ma ligne, ce qui a été préalablement fait avec fgets ...
Je vais tester ça...
Marsh Posté le 18-07-2008 à 12:03:09
Je suis désespéré là : je n'arrive pas à me déplacer correctement dans un fichier.
A part le fseek, il n'y a pas d'autres solutions ?
Ce que je n'arrive pas à faire, c'est le passage de ligne en ligne.
Il n'y a pas plus simple avec un compteur de ligne par exemple et lui dire, allez, va sur cette ligne là bas ?
Je crois que je rêve trop là ...
Marsh Posté le 18-07-2008 à 12:44:08
C'est normal, ça n'est pas fait pour ça, ça ne fonctionne pas comme ça. Un fichier c'est un flux de caractères, les lignes, ça n'existe pas.
Travaille sur une copie du fichier: tu recopies en changeant ce qui t'intéresses.
Marsh Posté le 16-07-2008 à 14:50:19
Salut tout le monde,
Voici mon problème qui est plus proche d'un problème de conception et de réflexion que d'un problème de C.
Je dois récupérer des données dans un fichier résultat.
Données :
Solution ?
=> Solution : tester au moyen de getc(pfichier) la fin du fichier. Tant que c'est différent de EOF, je continue.
=> Solution :
- Je teste au moyen de fgets la présence d'une chaine d'une certaine longueur
- Et il faut qu'elle soit égale en même temps à "Toto habite dans ..." au moyen de strcmp(chaine , "toto" )
Ce qui donnerai à la fin
Est ce que je suis sur le bon chemin ou je me trompe complètement ?