Remplacement d'une ligne dans un fichier (langage c)
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Remplacement d'une ligne dans un fichier (langage c)



  1. #1
    Zero Cold

    Remplacement d'une ligne dans un fichier (langage c)


    ------

    Salut à tout le monde.

    Mon programme consiste à mettre à jour l'une des informations d'un client.

    Voici le code source ainsi que le fichier où les clients sont enregistrés. Chaque ligne correspond à un client. La dernière information correspond au numéro du client, elle est invariable.


    Le problème apparaît lors de l'écriture qui consiste à remplacer la ligne du client dont l'une des informations doit être mise à jour.

    Quelqu'un pourrait-il m'indiquer où réside le problème.

    Merci d'avance.

    Code:
    bonapart grégoire 33 paris 23412 435234
    hauchecorne george 44 toulouse 123412 1234123
    holland francois 45 bruxelles 2134125 123412
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void miseAjour() {
    	int c,i,ligne;
    	char nom[50], prenom[50], nom_1[50], prenom_1[50],chaine[50],reponse,chaine_1[50],chaine_2[50],chaine_3[50],chaine_4[50],chaine_5[50],d_2[50];
    	FILE* fichier;
    	fichier=fopen("clients.txt","r");
    	i=0;
    	ligne=0;
    	printf("Tapez le nom et le prénom du client:");
    	scanf("%s %s", nom_1, prenom_1);
    	printf("Que voulez-vous mettre Ã* jour ?");
    	scanf("%s",&reponse);
    	printf("\n%c",reponse);
    	switch(reponse) {
    		case 'n' :
    			printf("Tapez le nouveau nom : ");
    			scanf("%s",chaine);
    			break;
    		case 'p' :
    			printf("Tapez le nouveau prénom : ");
    			scanf("%s",chaine);
    			break;
    		case'o':
    			printf("Tapez le nouvel âge : ");
    			scanf("%s",chaine);
    			break;
    		case 'a' :
    			printf("Tapez la nouvelle adresse : ");
    			scanf("%s",chaine);
    			break;
    		case 't' :
    			printf("Tapez le nouveau numéro de téléphone : ");
    			scanf("%s",chaine);
    			break;
    		default :
    			printf("Tapez une réponse valide !");
    	}
    	do {
    		fscanf(fichier,"%s %s", nom, prenom);
    		if(strcmp(nom,nom_1) == 0 && strcmp(prenom,prenom_1) == 0) {
    			ligne=i;
    			break;
    		}
    		while(c=fgetc(fichier) != '\n');
    		i++;
    		printf("%d",i);
    	} while(fscanf(fichier,"%d",&c)!=EOF);
    	printf("\n%d\n",ligne);
    	fclose(fichier);
    	fichier=fopen("clients.txt","r+");
    	i=0;
    	while(i<ligne) {
    		while(c=fgetc(fichier)!='\n');
    		i++;
    	}
    	fscanf(fichier,"%s %s %s %s %s %s", chaine_1,chaine_2,chaine_5,chaine_3,chaine_4,d_2);
    	printf("%s %s %s %s %s %s", chaine_1,chaine_2,chaine_5,chaine_3,chaine_4,d_2);
    	fclose(fichier);
    	fichier=fopen("clients.txt","r+");	
    	i=0;
    	while(i<ligne) {
    		while(c=fgetc(fichier)!='\n');
    		i++;
    	}
    	switch(reponse) {
    		case 'n' :
    			fprintf(fichier,"%s %s %s %s %s %s", chaine,chaine_2,chaine_5,chaine_3,chaine_4,d_2);
    			break;
    		case 'p' :
    			fprintf(fichier,"%s %s %s %s %s %s", chaine_1,chaine,chaine_5,chaine_3,chaine_4,d_2);
    			break;
    		case'o':
    			fprintf(fichier,"%s %s %s %s %s %s", chaine_1,chaine_2,chaine,chaine_3,chaine_4,d_2);
    			break;
    		case 'a' :
    			fprintf(fichier,"%s %s %s %s %s %s", chaine_1,chaine_2,chaine_5,chaine,chaine_4,d_2);
    			break;
    		case 't' :
    			fprintf(fichier,"%s %s %s %s %s %s", chaine_1,chaine_2,chaine_5,chaine_3,chaine,d_2);
    			break;
    		default :
    			printf("Tapez une réponse valide !");
    	}
    
    }
    void main() {
    	miseAjour();
    }

    -----
    Dernière modification par Antoane ; 26/01/2016 à 13h26. Motif: Insertion du code dans le corps du message

  2. #2
    Bluedeep

    Re : Remplacement d'une ligne dans un fichier (langage c)

    Bonjour

    Citation Envoyé par Zero Cold Voir le message
    Le problème apparaît lors de l'écriture qui consiste à remplacer la ligne du client dont l'une des informations doit être mise à jour.

    Quelqu'un pourrait-il m'indiquer où réside le problème.
    Cela serait plus facile si on avait une idée de la nature du "problème"

  3. #3
    Zero Cold

    Re : Remplacement d'une ligne dans un fichier (langage c)

    Le remplacement s'effectue correctement mais si le nouveau nom tapé, par exemple, diffère de l'ancien de 3 caractères, certains caractères dont le nombre est 3 figurent dans le fichier dans la ligne suivante qui n'existait pas auparavant.

    Désolé pour l’ambiguïté.

  4. #4
    Chanur

    Re : Remplacement d'une ligne dans un fichier (langage c)

    Et sans avoir essayé, je parie que si tu tape une ligne plus longue, le début de la ligne suivante va disparaître ...
    Tu écrit dans le fichier, en replaçant les octets existant. La suite du fichier reste à la même place.
    Or en fait, ce que tu veux, c'est modifier toute la suite du fichier : pense au octets réellement présents sur le disque : si tu change la longueur d'une ligne, chaque octet de la suite va avoir une valeur différente. Il va falloir tout décaler vers la droite si tu allonge la ligne et vers la gauche si tu la raccourcis.

    Le seul moyen est de récrire toute la suite du fichier.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [Aide]Langage C - Lecture dans un fichier
    Par Rouchesta dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 16/02/2012, 08h23
  2. Compter le nombre de fichier dans un dossier en langage c
    Par inviteac8a4e72 dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 20/09/2011, 17h35
  3. mettre une ligne en commentaire dans un fichier toto.ini
    Par abracadabra75 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 02/07/2010, 09h40
  4. Lecture dans un fichier texte en Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 16/04/2007, 11h04
  5. Creation d'un fichier excel langage C
    Par invite74b73858 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 26/03/2007, 22h23