[c] parsage

parsage [c] - Programmation

Marsh Posté le 09-12-2001 à 00:25:17    

le but de cet algo est d'ajouter dans une liste chaine tous les liens contenu dans un fichier .htm
====
l'algo est port certes si svous trouver mmieux aidez moi :)
====
l'algo affiche bien les lien mais ajoute seulement le dernier rencontrer ... pourtant la fonction ajouter_fin marche bien qd on fais a la main :
  liste = inserer_fin(liste,"lien1.htm",1);
  liste = inserer_fin(liste,"lien2.html",1);
  aff_liste(liste);
===  
bon voila l'aglo concerne ... ca doit etre tt con mais je trouve pas l'erreur:
===
#include <stdio.h>
#include <string.h>  
#include <stdlib.h>
#include "liste.c"
 
pelement *parsage(char *lien, pelement *liste)
{
  int i = 0, j = 0, sortie = 0;
  FILE *entree;
  char *lelien = NULL;
   
  lelien = malloc(100*sizeof(char));
  entree = fopen(lien, "r" );
  if (entree != NULL)
    {
      do
 {
   fread(&i, sizeof(char), 1, entree);
   if ((i == 'h';) || (i == 'H';))
     {
       fread(&i, sizeof(char), 1, entree);
       if ((i == 'r';) || (i == 'R';))
  {
    fread(&i, sizeof(char), 1, entree);
    if ((i == 'e';) || (i == 'E';))
      {
        fread(&i, sizeof(char), 1, entree);
        if ((i == 'f';) || (i == 'F';))
   {
     while (!feof(entree))  // gerer les ' ' avant le =
       {
         fread(&i, sizeof(char), 1, entree);
         if (i != ' ';) break;
       } // while
     if (i == '=';)
       {
         while (!feof(entree))// gerer les ' ' apres le =
    {
      fread(&i, sizeof(char), 1, entree);
      if (i != ' ';) break;
    } // while
         if (i == '\"';)  
    {
      fread(&i, sizeof(char), 1, entree);
      // pour ne pas avancer une case de trop
    }
         while ((!feof(entree)) && (sortie == 0))
    {
      if ((i == '\"';) || (i == ' ';) || (i == '>';))
        {
          lelien[j] = '\0';
          //lelien[j+1] = '\0';
          j = 0;
          sortie = 1;
        }
      if (sortie == 0)  
        {
          lelien[j++] = i;
        }
      fread(&i, sizeof(char), 1, entree);
    }  // while
         sortie = 0;
         printf("%s\n",lelien);
         liste = inserer_fin(liste,lelien,1);
       } // '='
   } // 'f'
      } // 'e'
  }  // 'r'
     } // 'h'
 }
      while(!feof(entree));
      fclose(entree);
      return(liste);
    } //  
  else  
    {
      printf("\n impossible d ouvrir le fichier\n\n" );
      return(liste);
    }
 
}  // parsage
 
 
int main(int argc, char **argv)
{  
  pelement *liste = NULL;
 
  liste = parsage("index.htm", liste);
  //liste = inserer_fin(liste,"lien1.htm",1);
  //liste = inserer_fin(liste,"lien2.html",1);
  aff_liste(liste);
  //free_liste(liste);  
 
  return(0);
}

Reply

Marsh Posté le 09-12-2001 à 00:25:17   

Reply

Marsh Posté le 09-12-2001 à 12:11:15    

otb82 a écrit a écrit :

le but de cet algo est d'ajouter dans une liste chaine tous les liens contenu dans un fichier .htm
====
l'algo est port certes si svous trouver mmieux aidez moi :)
====
l'algo affiche bien les lien mais ajoute seulement le dernier rencontrer ... pourtant la fonction ajouter_fin marche bien qd on fais a la main :
  liste = inserer_fin(liste,"lien1.htm",1);
  liste = inserer_fin(liste,"lien2.html",1);
  aff_liste(liste);
===  
bon voila l'aglo concerne ... ca doit etre tt con mais je trouve pas l'erreur:
===
#include <stdio.h>
#include <string.h>  
#include <stdlib.h>
#include "liste.c"
 
pelement *parsage(char *lien, pelement *liste)
{
  int i = 0, j = 0, sortie = 0;
  FILE *entree;
  char *lelien = NULL;
   
  lelien = malloc(100*sizeof(char));
  entree = fopen(lien, "r" );
  if (entree != NULL)
    {
      do
 {
   fread(&i, sizeof(char), 1, entree);
   if ((i == 'h';) || (i == 'H';))
     {
       fread(&i, sizeof(char), 1, entree);
       if ((i == 'r';) || (i == 'R';))
  {
    fread(&i, sizeof(char), 1, entree);
    if ((i == 'e';) || (i == 'E';))
      {
        fread(&i, sizeof(char), 1, entree);
        if ((i == 'f';) || (i == 'F';))
   {
     while (!feof(entree))  // gerer les ' ' avant le =
       {
         fread(&i, sizeof(char), 1, entree);
         if (i != ' ';) break;
       } // while
     if (i == '=';)
       {
         while (!feof(entree))// gerer les ' ' apres le =
    {
      fread(&i, sizeof(char), 1, entree);
      if (i != ' ';) break;
    } // while
         if (i == '\"';)  
    {
      fread(&i, sizeof(char), 1, entree);
      // pour ne pas avancer une case de trop
    }
         while ((!feof(entree)) && (sortie == 0))
    {
      if ((i == '\"';) || (i == ' ';) || (i == '>';))
        {
          lelien[j] = '\0';
          //lelien[j+1] = '\0';
          j = 0;
          sortie = 1;
        }
      if (sortie == 0)  
        {
          lelien[j++] = i;
        }
      fread(&i, sizeof(char), 1, entree);
    }  // while
         sortie = 0;
         printf("%s\n",lelien);
         liste = inserer_fin(liste,lelien,1);
       } // '='
   } // 'f'
      } // 'e'
  }  // 'r'
     } // 'h'
 }
      while(!feof(entree));
      fclose(entree);
      return(liste);
    } //  
  else  
    {
      printf("\n impossible d ouvrir le fichier\n\n" );
      return(liste);
    }
 
}  // parsage
 
 
int main(int argc, char **argv)
{  
  pelement *liste = NULL;
 
  liste = parsage("index.htm", liste);
  //liste = inserer_fin(liste,"lien1.htm",1);
  //liste = inserer_fin(liste,"lien2.html",1);
  aff_liste(liste);
  //free_liste(liste);  
 
  return(0);
}  




 :heink:  :(   :heink:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed