[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   -
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 !
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
scolphi Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   2
 
ok merci !
0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131
 
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".
0