Modification virgule fichier .txt [Résolu]

Signaler
Messages postés
43
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2011
-
ed73
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
-
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

Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Quand tu ecris un '\n', tu n'ecrases rien dans le fichier ???

ciao...
BruNews, MVP VC++
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

je suppose parce que tu ouvre le fichier en mode r+ et non pas w+
Messages postés
43
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2011

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.
Messages postés
43
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2011

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...)
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
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);