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 remplacer un mots dans un fichier texte ?


Sujet :

C

  1. #1
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut comment remplacer un mots dans un fichier texte ?
    bonjour,
    je ne suis pas très caller en C, cela fait 6 mois que j'apprend ce langage (a l'école) et aujourdh'ui, je bloque sur une fonction a réaliser :

    je cherche a remplacer un mot ou une lettre dans un fichier texte par un autre.

    est-ce que c'est possible ?

    merci d'avance

    EDIT :

    //option est le mot a supprimer
    //arg est le nouveau mot
    //opt est le chemin du fichier texte

    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
    rmpl(char option[],char arg[],char opt[])
    {
        char commande[K];
        char mot[K];
        FILE *fic;
        fic=fopen(opt,"a");
        if ((fic=fopen(opt,"r"))==NULL)
        {
            printf("Erreur\n");
        }
        else
        {
            while (feof(fic)==0))
            {
                fscanf(f1,"%s",&mot);
                compar=strcmp(mot,option)
                if (compar==1)
                {
                    mot=arg;
                }
                else
                {
                    //je sais pas quoi mettre;
                }
            }
        }
    je pense que c'est un debut mais je sais pas trop comment remplacer

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Salut,

    pourquoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fic=fopen(opt,"a");
    if ((fic=fopen(opt,"r"))==NULL)
    ??

    Soit en lecture soit en écriture mais les deux ensemble c'est pas faisable !
    En fait ce qu'il te faut faire, c'est avoir le fichier d'origine en lecture et un fichier temporaire en écriture, tu ne peux pas changer comme ca du texte dans un fichier sans passer par l'intermédiaire d'un fichier temporaire !

    Le plus simple serais de lire le fichier ligne par ligne avec fgets, rechercher le mot à remplacer dans la chaine, si le mot ne se trouve pas dans la chaine tu écrit le buffer dans le fichier temporaire, etc...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    pourquoi 2 fopen? tu pouvais directement tester fic sans refaire un fopen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fic=fopen(opt,"a");
        if ((fic=fopen(opt,"r"))==NULL)
    ce n'est pas comme ca que s'utilise la fonction feof.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            while (feof(fic)==0))
    je te conseillerais d'utiliser autre chose que fscanf.
    pourquoi pas une lecture complete du fichier avec un fread (ou par gros blocs s'il est gros)? (voir la FAQ pour trouver la taille du fichier)
    sinon tu peux lire ligne par ligne avec fgets.

    pour recherche une chaine de char, tu peux utiliser la fonction strstr qui te renvois un pointeur sur l'element que tu cherche. ensuite a toi de reflechir pour remplacer ton mot.

    -Edit-
    faut que je tappe plus vite moi
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  4. #4
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je ne vois pas comment faire....

    en faites si j'utilise fgets, je pourrais lire la phrase que je stocke dans un tableau. Ensuite, il faudrait que je remplace le mot par l'autre... je ne vois pas comment

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Il faut ouvrir un fichier en lecture, un autre en écriture.

    Tu lis les mots du premier fichier, si ce mot est recherché alors écris son remplaçant, sinon lui même.
    L'itération est humaine; la récursion, divine.

  6. #6
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    donc ca :

    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
     
    //option est le mot a supprimer
     //arg est le nouveau mot
     //opt est le chemin du fichier texte
     
    rmpl(char option[],char arg[],char opt[])
    {
     
        char mot[K];
        FILE *fic;
        FILE *fic2;
     
        fic=fopen('temp.tmp',"w");
        fic2=fopen('fichier.txt',"r");
     
    while (feof(fic)==0))
    {
         fscanf(fic2,"%s",mot);
         res=strcmp(option,mot);
         if (res==1)
         {
               mot=arg;
         }
          else
         {
          //je sais pas quoi mettre
         }
         fprintf(fic,"%s",mot);
    }
    ?

  7. #7
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Je pense que en le faisant comme tu proposes, tu n'auras que le mot remplacé dans ton fichier temporaire.
    Il faudrait que à la lecture de chaque ligne ( utilise fgets ),

    si le mot s'y trouve, tu le remplace et écris cette ligne dans ton fichier temporaire,
    sinon tu écris la ligne lue dans ton fichier temporaire.

    J'espère que je n'ai pas raconté de conneries, car le C est également nouveau pour moi.
    ( Mais bon, si on ne se lance pas ...)
    Wer nicht probiert, verliert !!

  8. #8
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je ne pense pas car soit je remplace le mot par le nouveau mot ou soit j'ecris le mot (qui n'est pas a remplacer).

    ah aussi, j'ai deux question :

    pourquoi sa me marche pas ?
    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
    void rmpl(char cmd[],char option[],char arg[],char opt[],char opt2[])
    {
     
        char mot[K];
        FILE *fic;
        FILE *fic2;
        char lettre[K];
        int compar=0;
     
        fic=fopen("temp.tmp","w");
        fic2=fopen(opt2,"r");
        compar=strcmp("-lettre",option);
        printf("fsdqlf");
        getch();
        while (feof(fic2)!=0)
        {
             fscanf(fic2,"%s",lettre);
             if (lettre==arg)
             {
                    fprintf(fic,"%s",opt);
                    printf("11111");
                    getch();
             }
             else (lettre!=arg);
             {
                fprintf(fic,"%s",lettre);
                printf("22222");
                getch();
             }
        }
        printf("%s %s",opt,lettre);
        getch();
    }
    et comment convertir un type chaine en un type entier, tout en gardant la valeur contenu dans la variable ?

  9. #9
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    bon je me rapproche... en faites, je n'arrive pas a recuperer ce que j'ecris dans opt2 ! car en faites, je demande a l'utilisateur de saisir a la fois cmd, option, arg, opt, opt2 .

    Quand je teste le programme, je saisi remplace -lettre coucou salut test.txt

    et lorsque je visualise le contenu de opt2 j'ai rien. En revanche, lorsque je saisi " remplace de re gg dig" j'ai bien dig contenu dans opt2 ... on dirait que c'est une histoire de place et que je "deborde" de ma chaine de caractere.
    Mes variables sont déclarer comme suit :

    char cmd[N];
    char saisie[N];
    char option[K];
    char arg[K];
    char opt[K];
    char opt2[K];

    avec N = 30 et k =100 ...

    les autres variables contiennent bien ce que je leur attribut, sauf opt2....
    je pense que c'est trop "technique pour que je puisse comprendre l'erreur " (par rapport a mes connaissance en C) c'est pourquoi je prefere demander l'avis des expert

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    As-tu réfléchis à l'implémentation de ton algo avant de te lancer dans la programmation en C ?
    As-tu réfléchis à ce qu'est un mot, comment on le reconnait dans une phrase ??
    Essaye d'abord sur une phrase simple de remplacer un mot par un autre, regarde tous les cas possibles, Début, fin de phrase, mot séparé par des espaces, par des virgules, point virgules, signes de ponctuation ...
    La première chose que tu dois faire est donc de saisir n'importe quelle phrase avec un fgets et écrire en sortie tous les mots qui la compose, dès que ce sera fait, ton programme aura beaucoup avancé.
    Ensuite l'algo est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ouvrir le fichier src en lecture
    ouvrir le fichier but en écriture
    tant que je lis un ligne dans le fichier src
       je traite cette ligne (en utilisant l'algo préparer avant qui fonctionne)
       j'écris la ligen dans le fichier but
    fin tant que
    fermer le fichier src
    fermer le fichier but
    Pour reconnaître les mots en C tu as la macros très pratique isalph(c) (#include <ctype.h>).
    D'autre part pour comparer des chaînes en C on utilise strcmp(str1, str2) qui renvoie 0 en case de succès ou un nombre différent de 0 autrement.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    avec un fgets je dois utiliser qu'une seule variable non ?
    donc je devrais passer par un fichier temporaire pour attribuer les mots saisi a chaque variable ?
    je ne comprend pas en quoi cela change quelque chose car je suis obliger de passer par c'est variable pour alèger mon code (sur sa totalité).

    et pour ce qui est de

    if (lettre==arg)
    je me rend compte que j'ai fait une grave erreur merci (strcmp)

    pour isalpha(c), je ne suis pas sur d'avoir bien compris son utilité ... cela permet il de reconnaitre les caractères selon les localisation ?? (é,è,ç,à,...) ?

    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
    void rmpl(char cmd[],char option[],char arg[],char opt[],char opt2[])
    {
     
        char mot[K];
        FILE *fic;
        FILE *fic2;
        char lettre[K];
        int compar=0;
     
        fic=fopen("temp.tmp","w");
        fic2=fopen(opt2,"r");
        compar=strcmp("-lettre",option);
        printf("fsdqlf");
        getch();
        while (feof(fic2)!=0)
        {
             fscanf(fic2,"%s",lettre);
             compar=strcmp(lettre,arg)
             if (compar==0)
             {
                    fprintf(fic,"%s",opt);
                    getch();
             }
             else (compar==1);
             {
                fprintf(fic,"%s",lettre);
                getch();
             }
        }
        printf("%s %s",opt,lettre);
        getch();
    }
    sinon, selon moi, ces lignes de code font :
    ouvrir fic en écriture
    ouvrir fic2 en lecture
    on regarde si option vaut "-lettre" // pas utile pour le moment car je n'est pas fini le code
    tant que le fichier2 n'est pas lu completement
    on prend un mot de la phrase et on le compar au mot qui doit etre remplacer
    si ce mot est a remplacer:
    -"on le remplace "et on l'ecrit dans le fichier
    sinon si ce mot n'est pas a remplacer
    -on l'ecrit dans le fichier
    fin tant que

    j'avoue que sa m'ennuie car cela fait 2jours que je bloque sur le probleme... sachant que je n'ai fais qu'1/10 de mon travail

Discussions similaires

  1. [Batch] Remplacer un Mot dans un fichier texte
    Par PythonNovices dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 01/07/2015, 12h07
  2. Remplacer un mot dans un fichier texte
    Par Invité dans le forum VBScript
    Réponses: 2
    Dernier message: 08/08/2014, 14h56
  3. Comment chercher un mot dans un fichier texte et le modifier?
    Par Ange_1987 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/05/2009, 18h24
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

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