Modification virgule fichier .txt [Résolu]

necromoine 43 Messages postés mardi 22 janvier 2008Date d'inscription 28 mars 2011 Dernière intervention - 20 mars 2011 à 14:03 - Dernière réponse : ed73 276 Messages postés lundi 8 septembre 2008Date d'inscription 15 avril 2013 Dernière intervention
- 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
Afficher la suite 

6 réponses

Répondre au sujet
ed73 276 Messages postés lundi 8 septembre 2008Date d'inscription 15 avril 2013 Dernière intervention - 22 mars 2011 à 14:01
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ed73
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 21 mars 2011 à 11:04
0
Utile
Quand tu ecris un '\n', tu n'ecrases rien dans le fichier ???

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cs_aymen87 109 Messages postés samedi 3 novembre 2007Date d'inscription 4 février 2016 Dernière intervention - 21 mars 2011 à 11:41
0
Utile
je suppose parce que tu ouvre le fichier en mode r+ et non pas w+
Commenter la réponse de cs_aymen87
necromoine 43 Messages postés mardi 22 janvier 2008Date d'inscription 28 mars 2011 Dernière intervention - 22 mars 2011 à 15:13
0
Utile
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.
Commenter la réponse de necromoine
necromoine 43 Messages postés mardi 22 janvier 2008Date d'inscription 28 mars 2011 Dernière intervention - 22 mars 2011 à 18:01
0
Utile
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...)
Commenter la réponse de necromoine
ed73 276 Messages postés lundi 8 septembre 2008Date d'inscription 15 avril 2013 Dernière intervention - 23 mars 2011 à 09:52
0
Utile
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);
Commenter la réponse de ed73

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.