[C] Supprimer une ligne dans un fichier txt

Résolu/Fermé
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 - 17 mai 2008 à 14:43
scolphi Messages postés 36 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 - 18 mai 2008 à 16:28
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

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 mai 2008 à 16:53
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 mercredi 25 avril 2007 Statut Membre Dernière intervention 18 mai 2008 2
18 mai 2008 à 16:28
ok merci !
0