Rechercher : dans
Par :

[C] Supprimer une ligne dans un fichier txt

Dernière réponse le 18 mai 2008 à 16:28:08 scolphi, le 17 mai 2008 à 14:43:15 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « [C] Supprimer une ligne dans un fichier txt » dans :
[Windows] Impossible de supprimer un fichier ou un dossier VoirSi Windows n'arrive pas à supprimer un fichier ou un dossier, la cause peut être l'une des suivantes : Le fichier ou le dossier à supprimer est utilisé par un processus du système Le dossier à supprimer contient des fichiers ou dossiers cachés ...
[Windows/Corbeille] Supprimer un fichier sans confirmation VoirVous en avez assez de vider continuellement votre corbeille ? Il est possible de supprimer les fichiers sans passer par la corbeille de deux façons différentes : Méthode manuelle Méthode automatique Méthode manuelle Pour ne plus avoir à...
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.

1

cchristian, le 17 mai 2008 à 16:12:07

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".
Cordialement.

Cchristian.

Répondre à cchristian

2

lami20j, le 17 mai 2008 à 16:53:01
  • +1

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


106485010510997108

Répondre à lami20j

3

 scolphi, le 18 mai 2008 à 16:28:08

Ok merci !

Répondre à scolphi
Collection CommentÇaMarche.net