|
Sujet : [c] parsage |
| otb82 |
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: |
| otb82 |
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: |
| otb82 |
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);
} |