Oui il cartonne. Erreur de compil "attention : array subscript has type `char'"
Mais ça marche avec -Wno-char-subscripts, une question de char signé je crois.
Tiens essayes celui-là
Oui il cartonne. Erreur de compil "attention : array subscript has type `char'"
Mais ça marche avec -Wno-char-subscripts, une question de char signé je crois.
Tiens essayes celui-là
Bizarre aucun warning sous devcpp.....Erreur de compil "attention : array subscript has type `char'"
Mais je pense que cela doit venir de
Oui c'est pas très propre
Code : Sélectionner tout - Visualiser dans une fenêtre à part pt_functions[**_s]
Sympa ton code Lunixinclar, mais mettre les lettres en hexa, cela ne permet pas d'aller plus vite, et cela peut se révéler non portable.
En tout cas, c'est super court comme code
L'hexa c'est vraiment obligatoire ou c'est pour faire joli ?Envoyé par Lunixinclar
Si j'ai bien vu, quitte à comparer comme tu le fais, tu gagnerais probablement en rapidité en faisant une comparaison avec un uint64_t ou 2 uint32_t (une ou deux comparaisons au lieu de 7 ou 8 + comparaison d'entiers de 32 ou 64 bits au lieu de comparaisons, plus lentes, sur des char)...Enfin, c'est juste une idée...
Un problème bien exposé
est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.
devcpp ne doit pas compiler avec -Wall. De toute façon c'est vraiment acceptable comme construction à mon avis : ce n'est pas comme si utiliser un char comme indice risquait de provoquer des débordements en soi...Envoyé par Ti-R
D'ailleurs ce n'est qu'un warning, pas une erreur.
Par ailleurs utiliser les valeurs hexa pour les lettres c'est presque de l'obfuscation... Le code est ultra-court, mais il faut dire qu'il s'en tient au minimum demandé ! En tout cas dans mes benchmark il est légèrement plus lent que celui de Ti-R (c'est infime).
--
Jedaï
Je viens d'essayer en modifiant son code pour que ça utilise deux uint32_t, mais ça l'a plutôt ralenti... Peut-être m'y suis-je mal pris.Envoyé par David.Schris
--
Jedaï
J'avoue, l'idée m'est venue et je l'ai partagée sans vraiment y réfléchir avant, donc...ça vaut ce que ça vaut...Envoyé par Jedai
Hypothèse : le ralentissement (ou le non-gain) est peut-être dû au fait que les données ne sont pas alignées...?...
Un problème bien exposé
est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.
Bonsoir,
Voilà, j'ai fait mon parser. Il supporte pas mal de cas de figures :
À part ça le code est assez laid, je prendrais le temps de le rendre plus lisible et de le fractionner un peu ...
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 <html> <head> <title>Test Html</title> </head> <body> 0:Monsieur Durant s'en allait au marché <a href="http://www.marche.com(1)"> le marché</a> 1:Monsieur Durant s'en allait au marché <A href="http://www.marche.com(2)"> le marché</a> 2:Monsieur Durant s'en allait au marché <A HREF="http://www.marche.com(3)"> le marché</a> 3:Monsieur Durant s'en allait au marché <a href='http://www.marche.com(4)'> le marché</a> 4:Monsieur Durant s'en allait au marché <A href='http://www.marche.com(5)'> le marché</a> 5:Monsieur Durant s'en allait au marché <A HREF='http://www.marche.com(6)'> le marché</a> 6:Monsieur Durant s'en allait au marché <a href='http://www.marche.com(7)'> le marché</a> 7:Monsieur Durant s'en allait au marché <A href='http://www.marche.com(8)'> le marché</a> 8:Monsieur Durant s'en allait au marché <A HREF='http://www.marche.com(9)'> le marché</a> 9:Monsieur Durant s'en allait au marché <a href="http://www.marche.com(10)"> le marché</a> 10:Monsieur Durant s'en allait au marché <A href="http://www.marche.com(11)"> le marché</a> 11:Monsieur Durant s'en allait au marché <A HREF="http://www.marche.com(12)"> le marché</a> 12:Monsieur Durant s'en allait au marché <A href=http://www.marche.com(13)> le marché</a> 13:Monsieur Durant s'en allait au marché <A HREF=http://www.marche.com(14)> le marché</a> 14:Monsieur Durant se cassa la jambe au marché <img onclick="alert('<a href="creak"'>crack</a>')" src="img_blabla/img.gif(15)" /> 15:Monsieur Durant s'en allait au marché <a HrEf= "http://www.marche.com(16)">marche</a> 16:Monsieur Durant s'en allait au marché <a class="blob" HrEf= "http://www.marche.com(17)">marche</a> 17:Monsieur Durant s'en allait au marché <a hreflang="fr" href="http://www.marche.com(18)">marche</a> <img src="img_bla/bli.png(19)" href="blablab"> <iMg SrC="imags/blabi.png(20)"> <img Src=imgage/blibli(21) /> <img src=/img/bili(22) /> <img src=/img/nlib(23) /> <img class="blab" src="/img/lib(24)"> <a href="/http.com(25)"></a> </body> </html
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Pour le fun j'ai fait une version de mon code en UINT32
Suivant l'idée de David.Schris
Bon l'inconvénient de la méthode, c'est que maintenant hReF ne passe plus, juste href et HREF et IMG= et img=
C'est juste pour le fun et il y a plein de jolie warning car c'est pas très propre
Et j'ai mis une "contest_html_v0.2.c", qui empêche un buffer overflow si l'url fait plus de 1024, c'est juste le premier code corrigé, avec un changement de la taille du buffer pour le chargement des données.
[EDIT]
Dans la version fun, modifier
Sinon les images ne seront pas prise en compte... oups
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 "IMG=" en " IMG" "img=" en " img"
[/EDIT]
Il y a des failles dans ton code Lunixinclar
Si le dernier caractère des 8ko du début de la page est '=', que tu recharges le reste de ta page via fread et que tu tests ensuite avec n=0 -> buf[n-1] donc buf[-1] donc -> problème
Si b supérieur à 1023 -> problème aussi
Je dois avoir aussi des erreurs et j’ai eu exactement les mêmes problèmes.
Bonjour,
J'ai modifié mon code pour supporté plus de cas et gagné quelques nanos par-ci, par-là.
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Bon je poste une version speed... qui a les mêmes limitation que Lunixinclar
Pour le fun
Salut, ça compile plus
Ti-R-3.c:31: error: erreur de syntaxe before "uint32_t"
Ti-R-3.c: Dans la fonction « ParseLink »:
Ti-R-3.c:35: error: `_s' undeclared (first use in this function)
Ti-R-3.c:35: error: (Each undeclared identifier is reported only once
Ti-R-3.c:35: error: for each function it appears in.)
Ti-R-3.c:49: error: `_low_case_name' undeclared (first use in this function)
Ti-R-3.c:49: error: `uint32_t' undeclared (first use in this function)
Ti-R-3.c:49: error: erreur de syntaxe before ')' token
Ti-R-3.c:49: error: `_up_case_name' undeclared (first use in this function)
Tchetch oki http://2007.perso.orange.fr/resultats.htm
Ben il va falloir optimiser encore un peu tout ça ... (si jamais il compile sur Win32 si tu enlèves les redéfinitions de getc et putc (mais il sera plus lent))
Sinon ne serait-il pas intéressant de faire aussi un petit test sur les cas qui peuvent être traités par ces parsers ?
On fait une liste de liens des plus simples aux plus complexes et on compte combien le parser en trouve à la fin ...
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Si si Lunixinclar met le minimum en option de compil
Sans passer les warning en errors.
Enlève -Wall
ps: J'ai remis à jour le fichier "contest_html_v0.3_speed.c" pour enlever des warnings et corriger 2 trucs.
Ta page HTML est super Tchetch. Pour un webbot.
- Et sinon t'as fait quoi cet été?
- Bah j'ai fait la course aux micro-secondes c'est super excitant!
Avec ou sans Wall veut pas comp
(fausse joie sur le 13ms joie désolé mon algo était foireux c'est corrigé)
Allez Ti-R faut que ça compile faut que tu repasses devant
Moi je compil le truc...
Je run cela fonctionne...
Sous DevCpp
Compiler: Default compiler
Building Makefile: "C:\Dev\C-Cpp\DevCpp\projet\Makefile.win"
Executing make clean
rm -f main.o test_html.exe
gcc.exe -c main.c -o main.o -I"C:/Dev/C-Cpp/DevCpp/include" -fexpensive-optimizations -O3
gcc.exe main.o -o "test_html.exe" -L"C:/Dev/C-Cpp/DevCpp/lib" -s
Execution terminated
Compilation successful
essaye avec un tit batch pour voir
Si ça marche pas bienvenue dans les joies de la portabilité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @echo off @gcc -o Ti-R-3.exe TiR-3.c @pause
Le problème vient plutôt du fait que uint32_t n'est pas dans la même librairie sous Windows(Mingw) et sous Linux... Il suffit de remplacer uint32_t par unsigned int sur la plupart des plateformes (et nous ne cherchons pas à faire un parser pour l'embarqué, donc...). Un petit coup de sed et il n'y paraîtra plus.
(NB : dans mes benchs il n'est pas plus rapide que ton premier essai)
--
Jedaï
La v0.3 semble buggué, sur wblnks.html elle trouve plus de 10000 liens...
Donc faut laisser tomber...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager