Partage
  • Partager sur Facebook
  • Partager sur Twitter

remplacer une chaine dans un fichier

Sujet résolu
Anonyme
    3 novembre 2006 à 11:54:46

    Bonjour a tous,
    J'aimerais savoir comment faire pour:
    1.Ouvrir tous les fichiers d'un dossier
    J'ai deja essayé ca:

     FILE* fichier = NULL;
     fichier = fopen("*.*", "r+");

    mais ca marche pas (cest surement avec une boucle qu'il faut le faire)
    2.Chercher une chaine de caracteres dedans
    3.Si elle y'est je veux la remplacer par une autre
    (Petite precision:j'ai cherché avant de poster mais rien...)
    Merci d'avance
    Guigui9234
    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2006 à 12:08:21

      Déjà à mon avis, il n'y a pas de solution aussi simple que "fichier = fopen("*.*", "r+");" comme tu le dis il doit falloir faire une boucle car la variable fichier ne stoque qu'un pointeur de fichier, il faut donc faire un tableau de pointeurs sur FILE. Pour la suite, avec quelques boucles et quelques tests ça doit pouvoir se faire, je ne sais pas s'il existe des fonctions déjà écrites pour ça si c'est ce que tu cherches.
      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2006 à 12:08:58

        Pour pouvoir ouvrir tous les fichiers d'un répertoire, il faut que tu les liste avant. Pour ce faire, utilise la bibliothèque dirent (en incluant dirent.h et en utilisant le man ici.
        Une fois que tu aura le nom de tous tes fichiers, les ouvrir est un jeu d'enfant (via fopen et autres).
        Pour ce qui est de chercher une chaine de caractères dedans, essaie de coder une fonction qui te servira à faire ça. Par exemple, lis tout le fichier, met-le dans une chaine de caractère, manipule ta chaine de caractère ainsi obtenue et réécris-là dans ton fichier une fois finie. Ton remplacement se fera aussi sur cette chaine, ça sera plus simple (c'est pas très optimisé mais ça devrais marcher.)

        Voilà, J'espère avoir répondu à tes question.

        Tcho
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          3 novembre 2006 à 13:14:55

          Merci ,
          mais alors comment faire pour remplacer la chaine dans la variable que j'aurais obtenu.
          N'y aurait t'il pas une sorte d' ereg_replace (comme en php)? ^^
          Merci d'avance
          Guigui9234
          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2006 à 13:20:58

            Bah si la chaine est de même longeur, il suffit de faire un fputs ou fprintf car ces fonctions écrasent ce qui est déjà écrit.
            Sinon tu copies tout le texte après la chaine dans un autre fichier, tu insère ton texte (ce qui écrase l'autre si la longueur est plus grande) et tu remet la suite du texte à partir du fichier temporaire.
            • Partager sur Facebook
            • Partager sur Twitter
              3 novembre 2006 à 13:21:20

              Non, il me semble pas. Par contre tu peux la créer toi-même la fonction ^^
              par exemple : dans la chaine suivante (char*) chaine tu veux remplacer 123 par 456 :
              "azert 123 qsdfg".
              1/ tu recopie "azert " dans (char*) temp1
              2/ tu recopie " qsdfg" dans (char*) temp2
              3/ tu écris temp1, "456" et temp2 dans chaine.

              Voila, j'espère que tu as compris (c'était beaucoup plus simple d'expliquer avec un exemple).
              Essaie de faire la fonction, si tu n'y arrive pas, on pourra t'aider. (c'est pas forcément le plus rapide à l'exécution, mais ça a l'avantage de marcher comme méthode. si quelqu'un a autre chose à proposer...).
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                3 novembre 2006 à 13:25:09

                En fait ce que je veux faire c'est que j'ai plein de fichiers .htm et .php
                et je voudrais changer en masse le nom du fichier css qui est "inclut" dans chacun d'eux le probleme est que chaque fichier a une longueur different et le code pour mettre le css n'est pas toujours au meme endroit.
                Voila merci d'avance
                Guigui9234
                • Partager sur Facebook
                • Partager sur Twitter
                  3 novembre 2006 à 13:31:17

                  o_O je comprends pas l'intérêt de faire un programme pour ça... Si tu utilise notepad++, il suffit que tu ouvre tous tes fichiers, tu fait un remplacement général de l'ancien nom du fichier.css par le nouveau. (remplacer tous)

                  Sinon, la méthode que je t'ai donnée marche, il suffit de faire la fonction de remplacement de texte. A la limite (je sais pas comment sont fait tes .htm et autres), mais tu peux utiliser le passage de fichier par arguments à la fonction main et automatiser le tout. Mais si tu tiens à le faire par un programme fait toi-même, il te faudra la fonction dont je te parlais lors de mon précédent message.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    3 novembre 2006 à 13:44:13

                    Dans Notepad++ on peut modifier une chaine de tous les fichiers ouverts d'un seul coup?
                    Si oui peut tu m'expliquer comment faire.
                    Si j'avais su je me serais pas galeré a faire ca
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 novembre 2006 à 13:51:24

                      Bah Edition -> Remplacer ...
                      Tu écrit ce qui doit être recherché, ce par quoi il doit être remplacé et tu clic sur "Remplacer dans tous les doccuments ouverts".
                      Et là tadam : un message qui te dit qu'il a remplacer x fois !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 novembre 2006 à 13:52:46

                        Citation : guigui9234

                        Dans Notepad++ on peut modifier une chaine de tous les fichiers ouverts d'un seul coup?
                        Si oui peut tu m'expliquer comment faire.
                        Si j'avais su je me serais pas galeré a faire ca


                        J'espère, sinon, l'éditeur de Code::Blocks sait faire ça... (tu fais un projet avec tes .html, juste le temps de faire le remplacement)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                        Anonyme
                          3 novembre 2006 à 14:01:41

                          Merci
                          ca marche dans notepad++
                          :D
                          Guigui9234
                          • Partager sur Facebook
                          • Partager sur Twitter

                          remplacer une chaine dans un fichier

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown