[C] Supprimer une ligne dans un fichier txt [Résolu/Fermé]

Signaler
Messages postés
36
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
18 mai 2008
-
Messages postés
36
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
18 mai 2008
-
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 !

2 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 495
Salut,

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


11
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
36
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
18 mai 2008
2
ok merci !
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
117
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".