Modification virgule fichier .txt

Résolu
necromoine Messages postés 43 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 mars 2011 - 20 mars 2011 à 14:03
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 - 23 mars 2011 à 09:52
Bonjour, je souhaite faire un code qui permet de mettre un retour à la ligne apres chaque virgule d'un fichier texte, qui ressemblerait à :
Contenu texte :
a,b,c

Qui doit devenir
a,
b,
c

J'ai fait un code qui est le suivant :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE* texte = NULL;

    int lettre = 0;
    texte = fopen("virgule.txt", "r+");
        if (texte!=NULL){
            lettre = fgetc(texte);
            while (lettre != EOF){
                if (lettre == ','){
                    //fputs("\n", texte);
                    printf("%c", lettre);
                    fputs("\n",texte);
                }


            lettre = fgetc(texte);

        }

    fclose(texte);
    }
    else {

    printf("Impossible d'ouvrir le fichier virgule.txt");

    }


    return 0;

}


J'ai trouvé d'ou viens l'erreur, c'est au moment de l’écriture, savez vous pourquoi ?


Merci

6 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
22 mars 2011 à 14:01
Bonjour,

En fait tu veux intercaler des \n dans ton fichier. a,b,c deviendra donc a,\nb,\nc.

On voit que la taille du fichier va augmenter, dans ce cas il n'est pas possible d'utiliser le même fichier en lecture et en écriture car tu vas forcément écraser des données, comme le dit fort justement BruNews.

La bonne solution et d'ouvrir ton fichier en lecture, et un autre en écriture dans lequel tu écriras tes données au fur et à mesure de la lecture et où tu inséreras des \n là où il faut.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mars 2011 à 11:04
Quand tu ecris un '\n', tu n'ecrases rien dans le fichier ???

ciao...
BruNews, MVP VC++
0
cs_aymen87 Messages postés 109 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 4 février 2016
21 mars 2011 à 11:41
je suppose parce que tu ouvre le fichier en mode r+ et non pas w+
0
necromoine Messages postés 43 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 mars 2011
22 mars 2011 à 15:13
Merci pour cette réponse, j'ai effectivement trouvé dans un exemple de code, que le mode d'ecriture avec un "+" comportait des contraintes, il faut par exemple, replacer le curseur apres la lecture d'un caractère pour pouvoir ecrire (les deux actions ne peuvent avoir lieu l'un apres l'autre.
Je vais donc faire avec deux fichiers, je vous tiens au courant.
Merci encore pour votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
necromoine Messages postés 43 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 mars 2011
22 mars 2011 à 18:01
Voilà, mon code ressemble à ca :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *texte NULL, *final NULL;

    int lettre = 0;
    char lol = "";
    texte = fopen("virgule.txt", "r");
    final = fopen("final.txt", "w");
        if (texte!=NULL){
            lettre = fgetc(texte);
            while (lettre != EOF){
                lol = lettre;
                if (lettre == ','){
                    //fputs("\n", texte);
                    fputs("\n", final);
                }
                fprintf(final, "%c", lol);


            lettre = fgetc(texte);

        }


    }
    else {

    printf("Impossible d'ouvrir le fichier virgule.txt");

    }
fclose(texte);
fclose(final);

    return 0;

}


Mais y'a t'il un moyen de remplacer la virgule par le \n (d'ailleur je ne comprend pas pourquoi elle est la...)
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
23 mars 2011 à 09:52
Bonjour,

Au vu de ton code, il me semble que ton fichier final ressemblera à :

a
,b
,c

Si tu veux remplacer la virgule par \n, modifie simplement ton code ainsi :

if (lettre == ',')
fputs("\n", final);
else
fprintf(final, "%c", lol);
0
Rejoignez-nous