IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comment supprimer des éléments d'un fichier?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Par défaut Comment supprimer des éléments d'un fichier?
    Bonjour à tous,

    voila j'ai un fichier qui contient plusieurs lignes de noms. J'ai créé une fonction rechercher pour pouvoir afficher la ligne que je souhaite mais si je veux supprimer cette ligne comment je fait??
    y a t-il un moyen de supprimer les mots que l'on a récupéré avec un scanf??
    C'est trés urgent car je doit boucler ce programme pour lundi merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Il faut créer un fichier dans lequel tu copies tout sauf ce que tu veux effacer. Tu supprimes l'ancien fichier (remove()) puis renomme le nouveau fichier (rename()).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Par défaut
    OK je saisi la méthode mais si on a la chaine de mot, comment on fait on pour copier tout sauf ça? dsl je suis un débutant de chez débutant^^

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Par défaut
    Voilà j'ai fait une fonction qui recherche et affiche le fichier à supprimer puis qui copie dans un fichier temporaire le contenu du fichier d'origine et enfin qui renomme ce fichier temporaire.
    le probleme c'est que je n'ai réussi qu'à faire une copie du fichier complet.
    Comment je doit ordonner mon "while" qui se trouve dans "case'1'"
    pour qu'il ne prenne que ce qui est différent des mots précédemments affichés?
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    printf("\n\nSaisissez l'entreprise de l'enregistrement recherche : ");
    	scanf("%s",&EntrRecherche);
    	TrouveRecherche = 0;
    	do
    	{	fscanf(Client,"%d %s %s %s %s %s %s %s %s\n",&FNumEnreg,&FNom,&FPrenom,&FAdresse,&FVille,&FRemarques,&FEntreprise,&FMail,&FTelephone);
    		TiretToEspace(FNom,strlen(FNom));
    		TiretToEspace(FPrenom,strlen(FPrenom));	
    		TiretToEspace(FAdresse,strlen(FAdresse));
    		TiretToEspace(FVille,strlen(FVille));
    		TiretToEspace(FRemarques,strlen(FRemarques));	
    	    TiretToEspace(FEntreprise,strlen(FEntreprise));
    		TiretToEspace(FMail,strlen(FMail));
    		TiretToEspace(FTelephone,strlen(FTelephone));
    		if(strcmp(FEntreprise,EntrRecherche)==0)
    			TrouveRecherche = 1;
    	}while((TrouveRecherche != 1) && (!feof(Client)));
    	fclose(Client);
    	if (TrouveRecherche != 1)
    		printf("\nL'enregistrement n'existe pas.");
    		else
    		{	/*  -- Affichage dans une pseudo carte de visite --  */
    			printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
    			printf("³                                                                              ³");
    			printf("³                                   RESULTAT                                   ³");
    			printf("³                                                                              ³");
    			if (FNumEnreg < 10)
    				TailleNumEnreg = 1;
    				else
    				{	if (FNumEnreg <100)
    						TailleNumEnreg = 2;
    						else
    						{	if (FNumEnreg < 1000)
    								TailleNumEnreg = 3;
    								else TailleNumEnreg=4;
    						}
    				}
    			printf("³ Nø d'enregistrement : %d \n",FNumEnreg);
    			for (TailleNumEnreg;TailleNumEnreg<5;TailleNumEnreg++)
     
    			printf("³ Nom : %s \n",FNom);
    			/*for (TailleNom=strlen(FNom);TailleNom<7;TailleNom++)*/
     
    			printf("³ Prenom : %s \n",FPrenom);
    			/*for (TaillePrenom=strlen(FPrenom);TaillePrenom<24;TaillePrenom++)*/
     
    			printf("³ Entreprise : %s \n",FEntreprise);
    			/*for (TailleEntreprise=strlen(FEntreprise);TailleEntreprise<4;TailleEntreprise++)*/
     
    			printf("³ Adresse : %s \n",FAdresse);
    			/*for (TailleAdresse = strlen(FAdresse);TailleAdresse<28;TailleAdresse++)*/
     
    			printf("³ Ville : %s \n ",FVille);
    			/*for (TailleVille=strlen(FVille);TailleVille<30;TailleVille++)*/
     
    			printf("³ Remarques : %s \n",FRemarques);
    			/*for (TailleRemarques = strlen(FRemarques);TailleRemarques<10;TailleRemarques++)*/
     
    			printf("³ Mail : %s \n",FMail);
    			/*for (TailleMail = strlen(FMail);TailleMail<100;TailleMail++)*/
     
    			printf("³ Telephone Fixe : %s \n",FTelephone);
    			/*for (TailleTelephone = strlen(FTelephone);TailleTelephone<10;TailleTelephone++)*/
     
    				printf(" ");
    			printf("                    ³");
    			printf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
    		break;
    	}
    }
    	printf("***********************************************************\n\n");
    							printf("\t\tConfirmer : Supprimer le contact\n\n");
    							printf("***********************************************************\n\n\n");
    							printf("1.OUI : \n\n");
    							printf("2.NON : \n\n\n");
    							printf("***********************************************************\n\n");
    							printf("\t\t\tChoix <1,2> :\n\n");
    							fflush(stdin);
    							choix1=getch();
    							switch(choix1)
    							{
    								case '1' :
    							while (!feof(fichier))
    					{
    					fscanf (fichier, "%d %s %s %s %s %s %s %s %s \n",&NumEnreg,&FNom,&FPrenom,&FAdresse,&FVille,&FRemarques,&FEntreprise,&FMail,&FTelephone);
    					fprintf(fichier2,"%d %s %s %s %s %s %s %s %s \n",NumEnreg,FNom,FPrenom,FAdresse,FVille,FRemarques,FEntreprise,FMail,FTelephone);
    					} break;
    								case '2':
    									{
    										fclose(fichier);
    										fclose(fichier2);
    										remove("Client_temporaire.txt");
    									}
    									menu();
     
    							}
     
    	fclose(fichier);
    	fclose(fichier2);
     
    	remove("Client.txt");									//permet de supprimer le fichier
    	rename("Client_temporaire.txt","Client.txt");	        //permet de renommer le fichier

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par quent197
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("\n\nSaisissez l'entreprise de l'enregistrement recherche : ");
    scanf("%s",&EntrRecherche);
    Si EntrRecherche est bien un tableau de caractères comme le laisse supposer ton code, écrit plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s", EntrRecherche);
    Puisque EntrRecherche représente alors l'adresse du premier caractère du tableau, tandis que &EntrRecherche vaut l'adresse de EntrRecherche donc l'adresse d'un tableau, ce qui n'est pas le type attendu par le format %s. Même remarque pour tes fscanf.

    Citation Envoyé par quent197
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TiretToEspace(FNom, strlen(FNom));
    TiretToEspace(FPrenom, strlen(FPrenom));	
    TiretToEspace(FAdresse, strlen(FAdresse));
    TiretToEspace(FVille, strlen(FVille));
    TiretToEspace(FRemarques, strlen(FRemarques));	
    TiretToEspace(FEntreprise, strlen(FEntreprise));
    TiretToEspace(FMail, strlen(FMail));
    TiretToEspace(FTelephone, strlen(FTelephone));
    Tu perds beaucoup de temps en calculant la longueur de la chaîne à chaque fois. FNom, FPrenom, etc. sont des chaînes donc terminées par le caractère '\0'. Tu devrais exploiter cela pour détecter la fin d'une chaîne plutôt que de calculer sa longueur.

    Citation Envoyé par quent197
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TrouveRecherche = 0;
    do
    {
        /* ... */
    } while( TrouveRecherche != 1 && ! feof(Client) );
    Ce n'est pas comme ça qu'on utilise feof. Dans ton cas, le fichier est organisé en lignes. Fais donc plutôt une boucle avec fgets (lire un ligne) tant qu'elle ne retourne pas NULL puis pour chaque ligne lue, analyser avec sscanf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ( TrouveRecherche != 1 && fgets(ligne, sizeof(ligne), Client) != NULL)
    {
        sscanf(ligne, "%d %s %s ...", &FNumEnreg, FNom, FPrenom, ...);
        ...
    }
    Pour copier tous les mots d'un fichier vers un autre sauf un ou plusieurs mots à supprimer, toujours une boucle de fgets puis supprimer de la ligne toutes les occurrences du ou des mots à supprimer puis copier la ligne. Tout repose donc sur l'écriture de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void supprimer_mot(char * chaine, const char * mot_a_supprimer);
    Tu auras besoin des fonctions strstr (pour chercher un mot dans une chaine) et memmove (pour supprimer le mot).

Discussions similaires

  1. Comment supprimer des occurrences dans un fichier
    Par zeng49 dans le forum Général Python
    Réponses: 8
    Dernier message: 23/03/2013, 13h26
  2. Comment supprimer des lignes d'un fichier en fonction d'un autre fichier
    Par Ohemeg dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 21/04/2009, 13h56
  3. Comment supprimer des fichiers lorsqu'on quitte une interface
    Par ZAYDOUN dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 23/04/2007, 23h21
  4. Réponses: 7
    Dernier message: 16/05/2006, 15h40
  5. Comment supprimer des fichiers en nombre ?
    Par Didier L dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/01/2005, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo