Recherche d'erreurs dans un fichier HTML avec C - Forum C

A voir également:Recherche d'erreurs dans un fichier html avec c[lire un fichier html. erreur http 500] ✓ - Forum - Internet / Réseaux sociaux Fichier html - Articles Ouvrir un fichier html - Forum - HTML Comment lire un fichier html ✓ - Forum - Logiciels Rechercher un mot dans plusieurs fichiers word ✓ - Forum - Bureautique

Bonjour,

J'ai un projet de la fac, on nous demande d'ouvrir un fichier HTML et détecter les fautes d'orthographe de tous les balises utilisée​s dans​ ce fichier, détecter l'omission ou l'oubli des balises fermantes ou ouvrantes.
Ouvrir un fichier je connais mais les opérations ça me dépasse !

Svp, aidez-moi ?

Configuration: Android / Chrome 56.0.2924.87

Forum

A voir également:Recherche d'erreurs dans un fichier html avec c[lire un fichier html. erreur http 500] ✓ - Forum - Internet / Réseaux sociaux Fichier html - Articles Ouvrir un fichier html - Forum - HTML Comment lire un fichier html ✓ - Forum - Logiciels Rechercher un mot dans plusieurs fichiers word ✓ - Forum - Bureautique

Web: www.shapebootstrap.net

3 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour, n'as-tu pas été formé pour réaliser cela? comment cela peut-il te dépasser? de quelle formation s'agit-il?

Reply
réponses:
  • auteur

    Cela me dépasse parceque dans le cours de langage C , nous ne sommes pas encore arrivé à ce niveau, mais on nous demande de se surpasser !

    Si tu veux m'aider alors n'hésite pas !

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Salut MHIKAWOLFAK,

De la façon dont tu as formulé le sujet de l'exercice on peut comprendre de multiples choses. Si tu dois vérifier que la syntaxe d'un document HTML est valide, alors tu as beaucoup de travail car cela suppose que ton programme implémente toute la syntaxe du standard HTML, avec tous les tags html existants, leur syntaxe propre,...

Il y a des bibliothèque qui font cela, elles ne sont pas triviales et les réaliser dans le cadre d'un exercice me semble démesuré (à moins qu'on te demande juste de les utiliser) :

https://www.html-tidy.org/

Si ton exercice est beaucoup plus limité que ton message ne le laisse penser et, par exemple, se limite à vérifier qu'une balise ouvrante dans le code HTML contient une balise fermante, que cette balise existe ou non dans le standard, ou quelque soit le contenu de la balise, et sans que tu aies à vérifier si une balise peut en contenir une autre ou peut se chevaucher avec une autre, que ce n'est pas très compliqué.

Cela doit être indiqué par ton énoncé. La première chose est de bien comprendre celui-ci et tu auras déjà fait une partie importante de ton travail, et si ton énoncé n'est pas suffisamment précis, demande des précisions à ton enseignant.

Dal

Reply
réponses:
  • auteur

  • auteur

    Je sais comment ouvrir un fichier HTML avec C, mais savoir si une certaine portion de texte est une balise ou pas, c'est ce qui me manque !

  • auteur

    une balise ouvrante est du texte entre chevrons.

    à partir de là :

    -

    <dutexte>
    serait une balise ouvrante de
    -
    </dutexte>
    qui en serait la balise fermante correspondante

    (c'est une balise inventée, qui n'existe pas en HTML)

    Si tu n'as pas à vérifier si la balise existe en HTML, un exemple de procédure simpliste serait de :

    a- parcourir le contenu en texte du fichier
    b- lorsque tu trouves un chevron
    '<'
    de noter que tu as une nouvelle balise
    c- parcourir la suite jusqu'au prochain
    '>'
    en notant les caractères entre les deux qui formeront le nom de ta balise, que tu peux mémoriser dans une structure de données (par un exemple un tableau de chaînes, une liste chaînée,...) et en arrêtant le nom de la balise au premier espace ou caractère blanc trouvé pour le cas où la balise HTML a des attributs (par exemple
    <a href="https://www.commentcamarche.net">Visitez www.commentcamarche.net !</a>
    ) : ici la balise est en réalité
    <a>
    ...
    d- lorsque tu trouves une chaîne
    "</"
    parcourir la suite jusqu'au prochain
    '>'
    en notant les caractères entre les deux qui formeront le nom de ta balise fermante. Une fois que tu dispose du nom de la balise fermante, tu retires ce nom de la liste mentionnée en d- en commençant par la fin de la liste, s'il s'y trouve

    tu peux aussi vérifier qu'une balise fermante ne se trouve pas au milieu d'une balise ouvrante, et inversement, et qu'une fois un chevron
    '<'
    ou
    "</"
    est trouvé, que tu as bien un chevron
    '>'
    qui le termine ...

    tu peux aussi noter les numéros de ligne où se trouvent les balises pour donner des messages d'erreur y faisant référence, etc.

  • auteur

    retires ce nom de la liste mentionnée en d-

    je voulais dire "mentionnée en c-"

  • auteur

    Et comment est-ce que je peut lire chaque caractère du fichier !
    Éclaire un peu çà avec du code!

  • auteur

    si nous faisons l’exercice à ta place, cela ne te permettra pas de progresser, et encore moins de te surpasser.

  • auteur

    Et comment est-ce que je peut lire chaque caractère du fichier !
    Éclaire un peu çà avec du code!


    Merci pour cette réponse avenante à la mienne, que j'ai passé un peu de temps à rédiger dans le but de te guider.

    - tu peux le faire de multiples façons, une des façons est d'utiliser

    fgetc()
    , c'est la plus simple, même si ce n'est pas toujours la plus efficace
    - tu as la documentation de cette fonction et des exemples de code l'utilisant ici : http://www.cplusplus.com/reference/cstdio/fgetc/ ou dans tout autre site de référence ou ouvrage de référence que tu ferais l'effort de rechercher par toi même

    C'est bizarre que tu saches ouvrir un fichier, selon tes affirmations, mais pas en lire le contenu.

    Quoi qu'il en soit, il est facile de trouver l'information, comme tu le vois, pour peu que tu cherches.

    Autrement, yg_be a raison, et j'ajouterai aussi qu'on ne peut pas apprendre le C à ta place, c'est ton travail.

    Montre nous, toi, ton code si tu as des problèmes à le mettre au point. Des contributeurs du forum disposant du temps, de la motivation et des compétences de fournir un service bénévole à une personne de bonne volonté se manifestent en général.

    Bonne chance pour ton projet.

    _______
    Note importante : lorsque tu postes du code C sur le forum, fais le avec les balises "code c", afin que ton code soit correctement affiché par le forum, avec préservation de l'indentation, coloration syntaxique et numérotation des lignes.

    <code c>
    copie-colle ton code entre deux ces deux balises
    </code>

    Si tu ne veux pas taper les balises, tu les insères aussi en cliquant sur la flèche qui pointe vers le bas à gauche du bouton du forum servant à poster des images, et en choissant le langage "c", et tu n'as plus ensuite qu'à copier-coller ton code entre les deux balises, comme dans l'exemple ci-dessus.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Voici le code que j'ai taper, il est sensé compter le nombre des balises mais je crois qu'il y a des erreurs !


  #include<stdio.h> #include<stdlib.h>  int main() {     static const char filename[128] ;     printf("Tapez le nom et l'extention de votre fichier : ");     scanf("%s", &filename);     FILE *file = fopen(filename, "r");       if(file!=NULL)     {         int balise=0;         int i=0;        char line[200];         fgets(line, sizeof line,file);             if((line[0] || line[1] || line[2] =='<') && line[1] || line[2] || line[3] !='</'  )            {                 while(fgets(line, sizeof line, file) != NULL)                {                    balise+=1;                     printf("%s",line);                }                   printf("\n");                   printf("vous avez utiliser %d balises parents et enfants dans ce fichier\n",balise);            }         }         fclose(file);     }  

Reply
réponses:
  • auteur

  • auteur

    as-tu lu la note concernant les balises?
    je te suggère de d'abord faire des exercices plus simples pour apprendre les bases du langage. par exemple, compter le nombre de caractères et le nombre de lignes dans un fichier.

  • auteur

    Je vais essayer les gars, ne me laisser pas tomber !
    J'ai vraiment envie de réaliser ce projet !

  • auteur

    Relis mon message attentivement pour poster ton code correctement sur le forum la prochaine fois. Là, il est quasiment illisible car tu n'as pas indiqué le langage c dans la balise de code du forum (tu as utilisé une balise <code> et non pas une balise <code c>).

    Ensuite, tu n'as pas non plus suivi mes indications sur le descriptif d'un algorithme simple, ni celle sur la fonction standard C de lecture la plus simple que tu pourrais utiliser. Ce n'est pas le plus grave, car tu as le droit de te compliquer la vie, et, de toutes façons, il n'y a pas qu'une seule façon de faire (et, en plus, tu fais, en fin de compte quelque chose de différent par rapport à ce que tu disais au début, puisque tu ne cherches plus des "erreurs", mais, désormais, tu comptes les balises) et toi au d'autres pourront trouver de meilleures manières :-)

    Sur ton code.

    Sur le plan de la syntaxe ce que tu compares dans ton if ne fait sans doutes pas ce que tu penses.

    En C,

    (line[0] || line[1] || line[2] =='<')
    signifie, pour le compilateur C :

    - si
    line[0]
    est évalué à vrai (ce qui sera le cas si
    line[0]
    contient autre chose que
    '\0'
    ...
    - ou si
    line[1]
    est évalué à vrai (même remarque)
    - ou si si
    line[2]
    est égal au caractère littéral
    '<'
    ...

    Dans la comparaison qui suit les
    &&
    , comme tu ne mets pas de parenthèses, le
    &&
    ne sera appliqué qu'à l'opérande suivante.

    Ce qui suit dans la comparaison a les mêmes problèmes que ceux déjà expliqués. Avec le problème supplémentaire
    line[3] !='</'
    qui doit t'être signalé en avertissement par ton compilateur, puisque tu mets deux caractères littéraux entre apostrophes, ce qui n'a pas de sens.

    Il a dû te signaler aussi que tu définissais
    filename
    comme une
    const
    alors que tu en modifies le contenu avec
    scanf()
    .

    Utilise les messages d'avertissements du compilateur (avec le compilateur
    gcc
    , vérifie que l'option de compilation
    -Wall
    , qui signifie "Warnings all", est bien utilisée) pour t'aider à corriger ton code.

    Sur le plan de l'algorithme, si on devine ce que tu essayes de faire, ton raisonnement est faux. Les balises HTML peuvent se trouver n'importe où sur une ligne, pas uniquement en début de ligne.

    Bonne chance pour la suite.

  • auteur

    Vous m'aider beaucoup, tout d'abord merci pour tout jusque là.
    Mais j'ai encore un petit soucis ;
    J'aimerais cette fois-ci vérifier si une portion du contenu d'un fichier (HTML) se trouve dans un autre fichier (txt)!
    J'ai ouvert les deux fichiers puis j'essaie de le faire avec la fonction strstr de la bibliothèque string.h

    Voilà le code;

    <code c>
    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
    FILE *file1=fopen("priva.html","r");
    FILE *file2=fopen("list_balise.txt","r");

    char LF1 =fgets(ligneF,sizeof ligneF,file1);

    char LF2 = fgets(ligneB,sizeof ligneB,file2);

    while(LF1!=NULL && LF2 !=NULL)
    {
    char verif=strstr(LF2,LF2);
    if(verif!=NULL)
    {
    printf("%s",verif);
    printf("\t cette balise est dans la liste");
    }

    }
    return 0;
    }

    </code c>

  • auteur

    et tout fonctionne comme tu le souhaites?
    dommage que tu n'aies pas correctement utilisé les balises de code...

  • auteur

    Non, la fonction strstr ne marche pas tellement !

  • auteur

    Salut,

    Les balises marchent très bien par contre. Mais il faut s'en servir. Tu peux éditer ton message avec l’icône du petit crayon pour rajouter les balises C.

  • auteur

    J'arrive à détecter les balises mais j'essaie de vérifier si elles existent dans un autre fichier avec la fonction strstr ça le fait pas!

  • auteur

    Les balises du forum, ici ! Pour que l'on puisse lire ton code sans se crever les yeux.

    Comme l’expliquait [dal] dans ce message

    La balise de fin, c'est </code> et non </code c>

    Il faut que tu recolle ton code avec les connes balises.

  • auteur

    Salut MHIKAWOLFAK-47,

    Tu poses une autre question, qui n'a rien à voir celle que tu as initialement posée dans ce fil de discussion. Dans ce cas, tu dois créer une nouveau fil de discussion pour poser une nouvelle question.

    Fais cela, s'il te plaît, et veille à poster correctement ton code.

    Ensuite, le code que tu as posté ne compile pas, et donc tu ne risques pas de pouvoir l'exécuter.

    $ gcc -Wall 36078402.c  36078402.c: In function ‘main’: 36078402.c:9:18: error: ‘ligneF’ undeclared (first use in this function)   char LF1 =fgets(ligneF,sizeof ligneF,file1);                   ^~~~~~ 36078402.c:9:18: note: each undeclared identifier is reported only once for each function it appears in 36078402.c:11:19: error: ‘ligneB’ undeclared (first use in this function)   char LF2 = fgets(ligneB,sizeof ligneB,file2);                    ^~~~~~ 36078402.c:13:11: warning: comparison between pointer and integer   while(LF1!=NULL && LF2 !=NULL)            ^~ 36078402.c:13:25: warning: comparison between pointer and integer   while(LF1!=NULL && LF2 !=NULL)                          ^~ 36078402.c:15:14: warning: implicit declaration of function ‘strstr’ [-Wimplicit-function-declaration]    char verif=strstr(LF2,LF2);               ^~~~~~ 36078402.c:15:14: warning: incompatible implicit declaration of built-in function ‘strstr’ 36078402.c:15:14: note: include ‘<string.h>’ or provide a declaration of ‘strstr’ 36078402.c:15:21: warning: passing argument 1 of ‘strstr’ makes pointer from integer without a cast [-Wint-conversion]    char verif=strstr(LF2,LF2);                      ^~~ 36078402.c:15:21: note: expected ‘const char *’ but argument is of type ‘char’ 36078402.c:15:25: warning: passing argument 2 of ‘strstr’ makes pointer from integer without a cast [-Wint-conversion]    char verif=strstr(LF2,LF2);                          ^~~ 36078402.c:15:25: note: expected ‘const char *’ but argument is of type ‘char’ 36078402.c:15:14: warning: initialization makes integer from pointer without a cast [-Wint-conversion]    char verif=strstr(LF2,LF2);               ^~~~~~ 36078402.c:16:11: warning: comparison between pointer and integer    if(verif!=NULL)            ^~ 36078402.c:18:13: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]     printf("%s",verif);

    Tu devrais utiliser les messages d'erreur et avertissements produits par le compilateur pour corriger ton code. Tu apprendras beaucoup en cherchant par toi même pourquoi ces erreurs et avertissements sont signalés et en les corrigeant.

    Lorsque tu auras corrigé ton code, poste le sur le forum (dans un nouveau fil) si tu as toujours des problèmes, et si tu n'arrives pas à comprendre certains messages d'erreur ou avertissements en dépit de tes efforts, pose la question sur le nouveau fil que tu créeras.

    Dal

Leave a Replay

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