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 :

Problème modification d'un fichier txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut Problème modification d'un fichier txt
    Bonjour, je souhaite creer un petit utilitaire pour apprendre a manipuler les fichier en C.
    Mon but et d'ouvrir un fichier texte contenant des mots separés par une virgule tel que :
    avion,chat,télévision

    Et je voudrais ensuis que les virgules soient remplacés par des retour à la ligne ou que le retour à la ligne se fasse apres la virgule (peu importe).
    Mon code ressemble à ca, mais je pense qu'il ne faut pas que je lise le fichier mais que je déplace le curseur.

    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
     
    FILE* texte = NULL;
     
        int lettre = 0;
        texte = fopen("virgule.txt", "r+");
        if (texte!=NULL){
            while (lettre != EOF){
                if (lettre == 44){
                //fputs("\n", texte);
                fprintf(texte, "\n");
            }
     
                lettre = fgetc(texte);
     
            }
     
        fclose(texte);
        }
        else {
     
        printf("Impossible d'ouvrir le fichier virgule.txt");
     
        }
     
     
        return 0;
    }
    Pourriez vous ne pas me donner la solution, mais des pistes (grandes ^^) pour que je trouve.

    Merci

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Je ne comprends pas ce que tu veux dire, comment peux-tu espéré savoir où se trouvent les virgules sans lire le fichier .txt?
    A moins qu'elles se trouvent à intervalle régulier, je ne vois pas ce que tu veux faire.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut
    Avec le code que j'ai donné le fichier texte est lu..
    Il suffit de mettre une printf("%c", lettre); dans la boucle et le texte apparait.
    Ce que je veux faire c'est mettre un retour a la ligne apres chaque virgule.
    J'ai modifié mon programme pour voir d'ou vien l'erreur, et c'est bien au moment de l’écriture que le problème apparait.
    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
    #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;
     
    }

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Si le mode d'ouverture est "update" (avec +), on peut lire et écrire mais moyennant certaines contraintes :

    - Une écriture ne peut suivre une lecture sans avoir fait entre temps une opération de positionnement du curseur du fichier (fseek(), fsetpos() ou rewind()) (à moins que la lecture n'est provoquée un EOF).

    - Une lecture ne peut suivre une écriture sans avoir fait auparavant un fflush() ou une opération de positionnement du curseur du fichier.

    A noter en plus qu'écrire dans le fichier peut détruire les données suivantes, non encore lues, du fichier si on écrit plus qu'on ne lit (ce qui peut être le cas avec la lecture d'un seul caractère que l'on cherche à remplacer par '\n' qui, sur certains systèmes, correspond en fait à l'écriture de deux bytes).

    Le plus simple est d'avoir un fichier de sortie différent du fichier d'entrée quitte à, une fois l'opération terminée, détruire l'ancien fichier et renommer le nouveau.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut
    ok, mais pourrait tu me donner un peut plus de détail s'il te plait.
    Il faudrait que je stock tout le premier fichier dans un tableau (très gros si le fichier est gros).
    Et que je remplace dans le tableau les virgules, puis que je réécrive un fichier avec le nouveau tableaux, mais si il y a 1500virgules sa risque de faire beaucoup non ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Il n'y a pas besoin de stocker la totalité du fichier d'entrée dans un tableau. Tu peux remplir le fichier de sortie au fur et à mesure que tu lis celui d'entrée.

    En gros, tu lis le caractère du fichier d'entrée, tu le stockes dans une variable. Si la valeur retournée correspond à une erreur (EOF si tu utilises fgetc), tu sors de la boucle. Sinon :
    * Si la valeur est différente du caractère virgule, tu l'écris dans le fichier de sortie.
    * Sinon, tu écris un saut de ligne dans le fichier de sortie.
    Puis tu passe au caractère suivant...

Discussions similaires

  1. Problème Gestion Liste et fichiers txt
    Par Freud44 dans le forum Général Java
    Réponses: 2
    Dernier message: 26/08/2008, 21h10
  2. Problème de lecture de fichier .txt avec Flash
    Par cdevl32 dans le forum Flex
    Réponses: 0
    Dernier message: 25/05/2008, 17h35
  3. Problème de lecture de fichier .txt
    Par Lenaick dans le forum WinDev
    Réponses: 4
    Dernier message: 16/04/2008, 11h49
  4. Problème d'édition de fichiers .txt
    Par GCAccess dans le forum Access
    Réponses: 3
    Dernier message: 09/10/2007, 14h16
  5. Ouverture et modification d'un fichier .txt
    Par Marty McFly dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/05/2006, 09h57

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