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 modifier un buffer avant de le copier dans un fichier?


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut Comment modifier un buffer avant de le copier dans un fichier?
    Bonjour,

    Je suis débutante en C et suis confrontée à un problème. Je veux lire le contenu d'un fichier f1 et avant de le copier dans f2, changer un caractère c1 (s'il existe) en c2.
    Je réussit à lire le fichier sans problème. Je réussit à écrire dans un fichier sans problème.
    Merci pour toute aide.

    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    void copierEnModifiant (char * Fichier1, char * Fichier2, char c1, char * c2)
    {
        	FILE * fileSource;
        	FILE * fileCible;
     
    	fileSource = fopen(Fichier1, "r");
    	fileCible = fopen(Fichier2, "w");
     
    	if (fileSource == NULL)
        	{
            printf("Erreur de Lecture");
       	]
     
    	printf("LE fichier a été ouvert\n");
     
    	if (fileCible == NULL)
    	{
            printf("Erreur de Creation");
    	   fclose(fileSource);
    	}
     
          printf("Le fichier a été créé\n");
     
     
    	while (fgets(ligne, sizeof ligne, fileSource))
        	{
            //Comment tester l'existence du caractere c1 dans ligne ici et le remplacer par c2 avant de le copier dans f2?
     
           // Ce test que j'ai mis en commentaire ne marche pas
     
          /*int i;
            for (i = 0; i < strlen(ligne); i++)
    	{
    		if(ligne[i] == c1)
    				ligne[i] = c2;
            }*/
     
    	   fputs(ligne, fileCible);
     
        	}
     
     
        fclose(fileSource);
        fclose(fileCible);	
    	//return 0;
    }
     
     
    int main(void)
    {
        char * Fichier1 = "f1.txt";
        char * Fichier2 = "f2.txt";
     
        copierEnModifiant (Fichier1, Fichier2, "t", "y");
    }

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    c2 est un pointeur vers un caractère, pas un caractère. Il va falloir décider si

    - c2 devrait être un caractère

    - c2 doit bien être un pointeur, il faut remplacer c1 par *c2

    - c2 doit bien être un pointeur, il faut remplacer c1 par la NTCS désignée par c2.

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 773
    Par défaut
    Hello,

    Et le compilateur ne dit rien concernant c1 ? L'appel est fait avec un char * ("t"), mais la fonction s'attend à recevoir un caractère ('t').

    Le test mis en commentaire fonctionnerait très bien si les variables étaient du bon type (char)

  4. #4
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    Bonjour

    vous devez faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void replace(FILE *fp, char find_c, char replace_c) {
        char c;
        fseek(fp, 0, SEEK_SET);
        do {
            c = (char) getc(fp);
            if (c == find_c)
                fputc((int) replace_c, fp), printf("caractère trouvé !\n");
        } while (c != EOF);
    }

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2010, 12h20
  2. Comment modifier l'aspect des barres d'ascenseur dans le navigateur
    Par identifiant11 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/11/2009, 01h29
  3. Réponses: 5
    Dernier message: 22/01/2009, 10h20
  4. Modifier des éléments avant de les copier
    Par VinnieMc dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/07/2008, 14h41
  5. Tamponiser avant de copier dans un fichier ?
    Par Mersenne dans le forum Langage
    Réponses: 7
    Dernier message: 26/09/2006, 12h37

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