cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
1 févr. 2009 à 09:40
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
1 févr. 2009 à 12:40
Salut !
J'ai fait un algorithme qui permet de reformater un code HTML. Ca marche plutôt bien, le seul problème est qu'il prend environ 20 à 30 second pour traiter un code html qui fait 1200 lignes. Pouvez-vous m'aider pour optimiser mon code en vitesse d'execution?
Voici mon code :
Shared Function ReFormater(ByVal HTML() As String, ByVal Espace As Integer, ByVal AvecTabulation As Boolean, Optional ByVal Progress As Object = Nothing) As String
If Not Progress Is Nothing Then
Progress.Value= 0
End If
Dim RESULTAT As String = "" ' Est égale au résultat de la fonction
Dim HTML2 As String = Nothing
Dim HTML3 As String = Nothing
Dim tmp As String
Dim nbr As Integer = 0
Dim progression As Integer = 0
' On pourrais penser que cette boucle est inutile mais elle permet de supprimer les espaces en début de chaque ligne afin de pouvoir tout reformater sans être gêné par d'éventuel espace en début de ligne qui n'aurais rien à faire ici
For i As Integer = 0 To HTML.Length - 1
HTML(i) = HTML(i).Trim() ' Supprime les espaces déja présents en début et en fin de chaîne
' On vide la variable HTML() dans HTML2
If i = HTML.Length - 1 Then
HTML2 = HTML2 & HTML(i)
Else
HTML2 = HTML2 & HTML(i) & Environment.NewLine
End If
Next
If HTML2.Contains(Environment.NewLine) Then
HTML2 = HTML2.Replace(Environment.NewLine, Nothing)
End If
HTML3 = HTML2
progression = HTML2.Length
For i As Integer = 0 To HTML2.Length
tmp = HTML2.Substring(i, HTML2.Length - i)
tmp = tmp.Replace(" ", Nothing) ' Supprime TOUS les espaces afin de transformer par exemple un < html en <html, ce qui fais que c'est lisible par la condition si dessous
tmp = tmp.ToLower
' Pour certaine balise, on va rajouter un ou plusieur retour à la ligne
If tmp.StartsWith("<html") OrElse tmp.StartsWith("
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 1 févr. 2009 à 11:25
C'est a étudier,
Ce qui est sur c'est que ton ordre dans tes if est important
car c'est des if qui s'arrete d'interprété des que la conditions est remplit
Si tu mets <td avant <a avant <html ca sera plus optimisé
C'est logique ;-)
Pour les case, c'est pareil il me semble
mais je trouve ca mieux structuré
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 1 févr. 2009 à 12:01
Salut !
Alors voila :
J'ai un peu optimisé mon code en travaillant sur l'ordre des If. J'ai également put optimisé le début de la fonction en transformant :
Dim RESULTAT As String = "" ' Est égale au résultat de la fonction
Dim HTML2 As String = Nothing
Dim HTML3 As String = Nothing
Dim tmp As String
Dim nbr As Integer = 0
Dim progression As Integer = 0
en :
Dim RESULTAT, HTML2, HTML3, tmp As String
Dim nbr, progression As Integer
HTML2 = Nothing
J'en ai profité pour faire pareil avec la fonction VelerSoftware.WebSystem.HTML_Tabulation_intelligente_Formatage.Tabluation (qui n'est pas ici^^).
Par contre, le fait d'utiliser un System.Text.StringBuilder m'empêche de faire des chose du genre "If html2.Contains(environement.newline) then" et autre.
Et les Regex.... euuuh, j'ai rien compris en fait
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 1 févr. 2009 à 12:40
A, ok. Ba, pour les regex, j'ai comme l'impression que ça ne marche pas. Bon, pas trop grave tout de même. Je pense qu'il est déjà pas mal optimisé là.... Puisque je lit le code caractère par caractère, faut pas torp espérer aller très vite, et faut pas rêver d'avoir la même vitesse qui si c'était du C ou C++ =p