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 :

Récupérer des mots d'un source HTML


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Récupérer des mots d'un source HTML
    Bonjour à tous,
    Je doit récupérer les mots d'une page HTML en langage C.
    Pour simplier le problème, mon programme doit tout simplement ignorer tout texte compris entre les caractères < et > qui sont des instructions HTML. Je dois donc récupérer les mots à l'extérieur des caractères < et >. Les mots sont délimités par des espaces. On se retrouve donc avec des expressions du type:
    <blablablabla>mot1 mot2 mot3<blablablabla>mot 4<blablablabla>mot5 mot6...
    J'ai commencé à écrire une petite fonction mais il y a une couille dans le paté apparement. Je suis obligé de constituer un mot en récupérant les caractères 1 à 1 tant que je n'ai pas rencontré d'espace et que je suis à l'extérieur des caractères < et > . Apparement ce qu'il y a dans mon buffer ce n'est pas ce que je souhaite à savoir un mot. Je stockerai plus tard tous les mots dans un buffer. Pour le moment je raisonne à l'echelle d'un mot;
    voici ma fonction:

    //---- Fonction qui va extraire les mots non compris entre les caractères < et >
    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
    void extraire_mot(FILE*)
    {
      bool fCrochet = FALSE; // Initialisation du Flag.
      char buffer_mot[40]; // Buffer contenant le mot constitué par ajout de caractères. 
      char bData; // Variable locale qui contient le caractère en cours.
      int i; 
     
      do
      {                                                                                                 
        bData = fgetc(fichier);  // Lecture d'un caractère. 
        if (bData == '<') // Si le caractère rencontré est '<' positionnement du FLAG à '1'.
        {
          fCrochet = TRUE;          
        }
        else if (bData == '>' && fCrochet == TRUE) // Si le caractère en cours '>' et que le FLAG est vrai.
        {
          fCrochet = FALSE; // Positionnement du Flag à '0'.
          if(bData != ' ') // Tant que le caractère espace n'est pas rencontré.
          {
            buffer_mot[i++] = bData; // Récupération des lettres formants un mot.
            printf("%s", buffer_mot);
          }
        }
        else
        {
          i=0;
          memset(buffer_mot, 0, 40);      
    		}		
      }while(!feof(fichier));                                                                                                                                                               
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Letou_se Voir le message
    Bonjour à tous,
    Je doit récupérer les mots d'une page HTML en langage C.
    Pour simplier le problème, mon programme doit tout simplement ignorer tout texte compris entre les caractères < et > qui sont des instructions HTML. Je dois donc récupérer les mots à l'extérieur des caractères < et >. Les mots sont délimités par des espaces. On se retrouve donc avec des expressions du type:
    <blablablabla>mot1 mot2 mot3<blablablabla>mot 4<blablablabla>mot5 mot6...
    J'ai commencé à écrire une petite fonction mais il y a une couille dans le paté apparement. Je suis obligé de constituer un mot en récupérant les caractères 1 à 1 tant que je n'ai pas rencontré d'espace et que je suis à l'extérieur des caractères < et > . Apparement ce qu'il y a dans mon buffer ce n'est pas ce que je souhaite à savoir un mot. Je stockerai plus tard tous les mots dans un buffer. Pour le moment je raisonne à l'echelle d'un mot;
    voici ma fonction:

    //---- Fonction qui va extraire les mots non compris entre les caractères < et >
    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
    void extraire_mot(FILE*)
    {
      bool fCrochet = FALSE; // Initialisation du Flag.
      char buffer_mot[40]; // Buffer contenant le mot constitué par ajout de caractères. 
      char bData; // Variable locale qui contient le caractère en cours.
      int i; 
     
      do
      {                                                                                                 
        bData = fgetc(fichier);  // Lecture d'un caractère. 
        if (bData == '<') // Si le caractère rencontré est '<' positionnement du FLAG à '1'.
        {
          fCrochet = TRUE;          
        }
        else if (bData == '>' && fCrochet == TRUE) // Si le caractère en cours '>' et que le FLAG est vrai.
        {
          fCrochet = FALSE; // Positionnement du Flag à '0'.
          if(bData != ' ') // Tant que le caractère espace n'est pas rencontré.
          {
            buffer_mot[i++] = bData; // Récupération des lettres formants un mot.
            printf("%s", buffer_mot);
          }
        }
        else
        {
          i=0;
          memset(buffer_mot, 0, 40);      
    		}		
      }while(!feof(fichier));                                                                                                                                                               
    }
    Bon, déjà on n'utilise jamais feof() pour détecter la fin de fichier. Le but de feof() est d'indiquer, quand tu peux plus lire le fichier, si l'arrêt de la lecture est dû au cas "fin de fichier" ou pas (erreur disque, etc...). C'est une fonction qu'on utilise "à posteriori" de la lecture et non dans la lecture.

    Pour lire un fichier, on vérifie que la lecture elle-même se passe bien (quand la lecture se termine, la fonction de lecture renvoie une valeur particulière qu'on peut détecter) style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int bdata;
    while ((bdata=fgetc(fichier)) != EOF)
    {
       ...
    }
    Ensuite, tu peux pas traiter "buffer_mot" via les fonctions de manipulation de chaîne (style printf("%s")) tant que ce n'est pas une chaîne => autrement dit tant que t'y auras pas rajouté le caractère '\0' que toutes ces fonctions utilisent pour se repérer

    Pour le reste de l'algo, j'ai pas vraiment regardé s'il était correct.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des mots dans un fichier html
    Par neterfari dans le forum C++/CLI
    Réponses: 5
    Dernier message: 03/04/2014, 09h49
  2. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  3. Pb pour récupérer des mots de passe
    Par m@thieu84 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 26/05/2006, 18h07
  4. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

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