Supprimer une ligne dans un fichier csv en langage C

Fermé
Claire - 11 nov. 2022 à 21:43
 PierrotLeFou - 12 nov. 2022 à 02:10

Bonjour,

Je suis étudiante (donc novice) et dans le cadre d'un projet je devais créer un programme pour un camping permettant d'enregistrer 7 informations (nom, prenom, age, pays, département, durée du séjour, membres venant en vacances) par client avec un minimum de 20 clients dans un fichier csv. Mais aussi de pouvoir afficher l'intégralité du fichier, d'ajouter, de supprimer et de rechercher un client dans ce fichier. La fonction afficher et ajouter un client fonctionne.

Je suis bloquée sur la suppression d'un client, j'aimerais que l'utilisateur puisse entrer le nom du client à supprimer puis lire mon fichier ligne par ligne jusqu'a trouver le nom correspondant (mais il reste à gérer la possibilité que 2 personnes aient le meme nom de famille, et de devoir donc prendre en compte également le prénom du client à supprimer; mais sur ce point je ne sais pas comment aborder le programme je suis un peu perdue.

Mon prof à conseillé d'utiliser la fonction strcpy() qui permet de copier le contenu d'une chaine dans une autre. J'avais pensé pouvoir lire mon fichier ligne par ligne puis copier chacunes d'elles dans le second fichier mais le probleme est que cette fonctions écrase le contenu précédent de la variable dans laquelle on colle; si j'utilise ma méthode, chaque ligne collée risque d'effacer la précédente...

J'avais pensé aussi à utilser remove() simplement sur le numéro de ligne correspondant au client à suprimer mais si je ne me trompe pas cette fonction de fonctionne que sur les fichiers et non sur les variables contenues dans un fichier.

Je me demande également si je fais une suppression du client en ayant fait une recherche sur son nom et prénom, est ce que les autres informations de la ligne seront également supprimées ? (age, pays, département, duree du sejour , membres du groupe).

Je ne sais pas quelle méthode serait la mieux adapter mais comme mon prof l'a conseillé j'aimerais utiliser la fonction strcpy() si possibble.

Je dois rendre ce projet le vendredi 18 Novembre 2022, mais meme après cette date toute aide sera la bienvenue si je n'ai pas pu comprendre par moi meme d'ici là.

J'espère que toute cette lecture ne vous aura pas décourager.

Merci d'avance


Windows / Edge 107.0.1418.35

A voir également:

2 réponses

[Dal] Messages postés 6200 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 7 janvier 2025 1 097
Modifié le 11 nov. 2022 à 22:40

Bonjour Claire,

En C, pour supprimer une ligne d'un fichier "fichier.txt", tu n'as pas d'autre choix que de :

  1. ouvrir "fichier.txt" en lecture
  2. ouvrir un "fichier_temp.txt" en écriture
  3. lire chaque ligne de "fichier.txt" et les copier dans "fichier_temp.txt" à l'exception de la ligne à supprimer
  4. fermer les deux fichiers
  5. effacer "fichier.txt"
  6. renommer "fichier_temp.txt" en "fichier.txt"

Si le contenu de "fichier.txt" est déjà chargé en mémoire dans ton programme, tu n'as pas à faire 1., tu liras les données en mémoire en 3. au lieu de les lire dans "fichier.txt" et tu fermeras juste "fichier_temp.txt" en 4.

1
PierrotLeFou
12 nov. 2022 à 02:10

Si tu dois lire le prénom à la suite du nom, tu fais simplement deux saisies dans deux chaînes différentes.
Si tu fais les choses dans l'ordre tel que décrit par [dal], ce n'est pas grave "d'écraser" la zone de mémoire.
+ tu lis
+ tu vérifies
+ tu écris
Ce qui a été lu précédemment a déjà été sauvé dans le fichier de sortie (ou le tampon associé).
Puisqu'on n'a pas ton code, on ne sait pas comment tu fais.
Mais en général, on lit toute la ligne dans une chaîne et on isole les champs dans d'autres chaînes au besoin.
Puis on recompose la ligne avec les nouvelles informations et on écrit la nouvelle ligne au complet d'un seul coup.
Si tu oublies des informations en isolant ou en recomposant, c'est certain que tu vas perdre quelque chose.

0