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
    Nouveau membre du Club
    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
    Points : 29
    Points
    29
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    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)
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  4. #4
    Membre averti
    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 : 32
    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
    Points : 444
    Points
    444
    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);
    }
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

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