Supprimer les balises d'un fichier texte

cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 24 juin 2010 à 13:09
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 24 juin 2010 à 17:40
bonjour,
j'ai un fichier texte plein de balises telles que (<DOC> , </DOCNO> , </TEXT> etc.) je veux les éliminer toutes pour avoir comme résultat seulement le texte.
ya t-il une fonction ou une instruction qui me permet de le faire sachant que je programme en c++.
j'espère bien que vous pouvez m'aider à le faire.

5 réponses

cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
24 juin 2010 à 14:08
j'ai trouvé une solution je vais l'essayer, je pense qu'elleestplus simple;
c'est le fait de supprimer les lignes contenant "<" ou ">" car en fait les balises sont chacune dans une ligne;

si quelqu'un peut m'aider dans ce sens je serais vraiment incapable de le remercier.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 juin 2010 à 14:44
Tu peux faire sauter toutes les balises xml via des expressions rationnelles.
Boost intègre un module pour le faire: boost::regex.

Si tu ne veux pas utiliser ceci, tu peux aussi tout simplement recopier la chaîne comme ceci:
- On considère un booléen qui est mis à vrai quand tu dois recopier, et faux quand tu dois ignorer.

- Tu copies les caractères si le booléen est vrai
- Si tu vois un <, alors tu passe le booléen à vrai
- Si tu vois un >, alors tu passe le booléen à faux

Tu obtiens alors la même chaine, sans les balises.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
24 juin 2010 à 16:57
merci pour l'idée,
je suis arrivée enfin à la réaliser, voici mon code:
#include<stdio.h>
#include<string.h>

int main ()
{
  FILE *F, *FW;
  char ch;
  int i;


 if (NULL (F fopen ("in.txt", "r")))
return -1;
  if (NULL (FW fopen ("out.txt", "w")))
return -1;
do
   { ch = fgetc(F);
  if (ch '<')  i 0;

  if (ch '>') i 1;
  if (i==1) fprintf(FW,"%c",ch);
   } while (ch != EOF);

  fclose (F);
  fclose (FW);
  system("pause");
  return 0;
}


il est exécutable mais le caractère > n'est jamais éliminé car on a mis i=1, donc je propose de l'éliminer tout seul comme étant un caractère,
que vous dites Mr CptPingu.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 juin 2010 à 17:19
Quelques petites corrections:
- Ignore le caractère >
- Accepte le caractère > si pas dans une balise
- Ne met pas le caractère EOF dans le fichier

#include <stdio.h>
#include <string.h>

int main(void)
{
  FILE *f, *fw;
  char ch;
  int i = 1;

  if (NULL (f fopen ("in.txt", "r")))
    return -1;
  if (NULL (fw fopen ("out.txt", "w")))
    return -1;

  do
  {
    ch = fgetc(f);
    if (ch == EOF)
      break;

    if (ch == '<')
    {
      i = 0;
      continue;
    }
    else if (!i && ch == '>')
    {
      i = 1;
      continue;
    }

    if (i)
      fprintf(fw, "%c", ch);
  } while (ch != EOF);

  fclose(f);
  fclose(fw);

  return 0;
}


Exemple avec lequel j'ai testé:

<kikoo> test </toto> pouet


if (i >= 90)
{
  t = de > 89;
}


test


Sortie:

test pouet



if (i >= 90)
{
t = de > 89;
}


test


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
24 juin 2010 à 17:40
très bien et merci, j'ai pas pensé au fait d' accepter le caractère > si pas dans une balise,
merci infiniment.
0
Rejoignez-nous