[C] Supprimer une ligne dans un fichier txt
Résolu
scolphi
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
scolphi Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
scolphi Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je code en langage C. J'ai un fichier ec.txt avec plusieurs lignes non formatées les une en dessous des autres.
Chaque ligne est composée d'un nombre, un nom de ville puis 4 autres nombres.
J'aimerai pouvoir supprimer une ligne en donnant le nom de la ville.
Faut t-il décaler toutes les lignes suivantes d'un cran au dessus pour combler le vide ?
Je ne sais pas comment coder tout ça..
Merci d'avance !
Je code en langage C. J'ai un fichier ec.txt avec plusieurs lignes non formatées les une en dessous des autres.
Chaque ligne est composée d'un nombre, un nom de ville puis 4 autres nombres.
J'aimerai pouvoir supprimer une ligne en donnant le nom de la ville.
Faut t-il décaler toutes les lignes suivantes d'un cran au dessus pour combler le vide ?
Je ne sais pas comment coder tout ça..
Merci d'avance !
A voir également:
- Supprimer une ligne dans un fichier en c
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Impossible de supprimer un fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
2 réponses
Salut,
tu pourras faire comme ça par exemple
Il y a plusieurs possibilités de le faire.
Par exemple tu peux charger le fichier dans la mémoire et faire le traitement.
Je pense que la réponse est négative.
Soyons positifs ;-) c'est possible
Par exemple avec Perl
tu pourras faire comme ça par exemple
lami20j@debian:~/trash$ cat suppligne.c #include<stdio.h> #include<string.h> int main () { FILE *F, *FW; char ville[100], s[100]; int n1, n2, n3, n4; if (NULL == (F = fopen ("ville.txt", "r"))) return -1; if (NULL == (FW = fopen ("ville_resultat.txt", "w"))) return -1; printf ("Ville à supprimer ? "); scanf ("%s", ville); while (fscanf (F, "%d %s %d %d %d", &n1, s, &n2, &n3, &n4) == 5) if (strcmp (s, ville) != 0) fprintf (FW, "%d %s %d %d %d\n", n1, s, n2, n3, n4); fclose (F); fclose (FW); return 0; } lami20j@debian:~/trash$ lami20j@debian:~/trash$ cat ville.txt 1 Paris 1 1 1 2 Lyon 2 2 2 3 Marseille 3 3 3 4 Bordeaux 4 4 4 lami20j@debian:~/trash$ gcc suppligne.c lami20j@debian:~/trash$ ./a.out Ville à supprimer ? Lyon lami20j@debian:~/trash$ cat ville_resultat.txt 1 Paris 1 1 1 3 Marseille 3 3 3 4 Bordeaux 4 4 4
Il y a plusieurs possibilités de le faire.
Par exemple tu peux charger le fichier dans la mémoire et faire le traitement.
Je pense que la réponse est négative.
Soyons positifs ;-) c'est possible
Par exemple avec Perl
lami20j@debian:~/trash$ cat ville.txt 1 Paris 1 1 1 2 Lyon 2 2 2 3 Marseille 3 3 3 4 Bordeaux 4 4 4 lami20j@debian:~/trash$ perl -ni -e 'print unless /Lyon/' ville.txt lami20j@debian:~/trash$ cat ville.txt 1 Paris 1 1 1 3 Marseille 3 3 3 4 Bordeaux 4 4 4
scolphi
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
2
ok merci !
Bonjour,
J'ignore si il existe en langage C ou en d'autres langages une solution (simple) pour annuler un enregistrement d'un fichier séquentiel. Je pense que la réponse est négative.
Par contre si ton application n'est pas "figée", tu peux la modifier de telle sorte à effectuer des "annulations logiques" (positionnement d'un indicateur (0 ou 1) dans chaque enregistrement de ce fichier (ex 0 = annulé, 1 = actif). E n général on met plutôt une date d'annulation qui si elle est présente (différente de spaces) indique que l'enregistrement est annulé.
Le ou les programmes existants utilisant ce fichier devront bien entendu être modifiés afin de tenir compte du status de chaque enregistrement.
Périodiquement il faudra passer un traitement d'apuration qui ne conservera que les enregistrements actifs, les autres seront soit physiquement perdus soit contribueront à créer un fichier "historique des annulatiions".
J'ignore si il existe en langage C ou en d'autres langages une solution (simple) pour annuler un enregistrement d'un fichier séquentiel. Je pense que la réponse est négative.
Par contre si ton application n'est pas "figée", tu peux la modifier de telle sorte à effectuer des "annulations logiques" (positionnement d'un indicateur (0 ou 1) dans chaque enregistrement de ce fichier (ex 0 = annulé, 1 = actif). E n général on met plutôt une date d'annulation qui si elle est présente (différente de spaces) indique que l'enregistrement est annulé.
Le ou les programmes existants utilisant ce fichier devront bien entendu être modifiés afin de tenir compte du status de chaque enregistrement.
Périodiquement il faudra passer un traitement d'apuration qui ne conservera que les enregistrements actifs, les autres seront soit physiquement perdus soit contribueront à créer un fichier "historique des annulatiions".