J'ai fait ce code pour récupérer des décimales d'Euler depuis un site :
''' <summary>
''' Get Euler String from a database specified.
''' </summary>
Public Shared Function GetEulerFromDatabase(digits As Long, database As EulerDB) As String
Dim data As String = ""
Dim wc As New Net.WebClient
Try
If digits = 0 Then
data = 2
ElseIf digits < 0 Then
data = 2 * 10 ^ digits
ElseIf database = EulerDB.MacTutorHistory Then
data = wc.DownloadString("http://www-history.mcs.st-and.ac.uk/HistTopics/e_10000.html").Replace(" ", "").Replace(vbNewLine, "").Substring(219, 2 + digits)
End If
Catch ex As Exception
Throw ex
End Try
Return data
End Function
PS : EulerDB est une énumération.
Le problème ici est qu'à chaque fois on récupère la page en entier, ce qui peut causer des lenteurs surtout chez les personnes qui ont une mauvaise connexion.
Alors je souhaiterai savoir s'il était possible de récupérer un document (html, txt ou quoi que ce soit) lettres par lettres, c'est à dire par exemple j'ai une fonction GetPageContent(digits As Integer) que je l'appelle en lui donnant comme paramètre digits = 8 j'obtiens par exemple les 219+8 premiers caractères de la page ?
Et sinon pendant que j'y suis petite autre question, j'ai mis des summary dans mon code comme vous pouvez le voir juste ici, parce qu'en fait je code une bibliothèque de classes (.dll), sauf que quand j'exploite son code depuis un autre projet VB, je ne vois pas les summary. Est-ce normal ? Y a t'il moyen de faire en sorte qu'on puisse les voir ?
Bonjour
La page que tu récupères montre les 10000 décimales de e ( le nombre d'Euler)
Ceux-ci ne changent point : pourquoi ne mets-tu pas cette donnée en tant que variable Public dans ton projet ?
tu n'aurais même plus besoin de télécharger la page ensuite .
Ou alors juste la télécharger une seule fois !
Public EulerString as String = "2.718281828459045235360287471352662497757247093699959574966etc.............."
Bonjour,
Ce site là n'est qu'un test, mais après je le ferai avec d'autres sites qui ont bien plus de décimales et n'ayant pas envie de faire une DLL lourde...
If digits = 0 Then
data = 2 ' ici ce n'est pas une String
idem 2 lignes plus loin
2) au data où tu télécharges la page Internet tu récupères une String : .718281828459045235360287471352662497757247093699959574966etc..........."
La valeur de cette String ne change pas
Au lieu de recharger cette valeur à chaque fois que tu appelles la fonction GetEulerFromDatabase tu la mets en variable à l'initialisation de ta classe en la téléchargeant une seule fois et à chaque fois que tu te sers de la fonction GetEulerFromDatabase tu te sers de cette valeur
Public Valeur as String
' à l'initialisation ( tu télécharges une bonne fois pour toutes
Valeur = wc.DownloadString("http://www-history.mcs.st-and.ac.uk/HistTopics/e_10000.html").Replace(" ", "").Replace(vbNewLine, "")
''' <summary>
''' Get Euler String from a database specified.
''' </summary>
Public Shared Function GetEulerFromDatabase(digits As Long, database As EulerDB) As String
Dim data As String = ""
Try
If digits = 0 Then
data = 2 ' à corriger
ElseIf digits < 0 Then
data = 2 * 10 ^ digits ' à corriger
ElseIf database = EulerDB.MacTutorHistory Then
data =Valeur.Substring(219, 2 + digits) ' on retrouve Valeur qui a été téléchargé une seule fois
End If
Catch ex As Exception
Throw ex
End Try
Return data
End Function
si tu veux tu peux même mettre Valeur en paramètre de ta fonction GetEulerFromDatabase
autre chose
- Dans les propriétés du projet à l'onglet Compiler mets Option Strict et Option Explicit sur True
- Et à l'onglet Références décoches la Référence à Microsoft visual Basic
La première option t'oblige à déclarer toutes les variables et à respecter leurs types - > voir le
data = 2
au-dessus où tu mélanges valeur numérique et valeur String ( chaine de caractères)
La seconde option te permet de faire du vrai VB Net ( et non à mélanger du VB 6 avec VB Net : en passant remplace
As-tu activé Option Strict et Option Explicit ?
Ensuite, stocker les décimales en dur serait plus efficace et moins aléatoire.
1) De ce que je comprends, tu interroges la page à chaque calcul, je pense que la requête ne devrait être faite qu'une seule fois, puis le résultat stocké en local/mémoire.
2) Si le site est down, il te faut gérer l'exception, si la page change, il faudra adapter ton code, ... Pour cela, prendre la valeur la plus longue que tu as et la mettre en dur (puis éventuellement raccourcir la chaîne si besoin) sera plus sûr et tout aussi fiable.
Bonjour NHenry
A mon avis la seconde question est résolue ( celle concernant ton premier message)
La première question concernant le chargement de la page internet ne l'est point à mon avis !
Il ne m'a pas encore répondu
13 mars 2018 à 18:51
Ce site là n'est qu'un test, mais après je le ferai avec d'autres sites qui ont bien plus de décimales et n'ayant pas envie de faire une DLL lourde...
13 mars 2018 à 23:32
Dans ce cas la solution de télécharger une seule et unique fois est la meilleure
14 mars 2018 à 12:48
Et il n'est vraiment pas possible de récupérer la page caractère par caractère ?
Modifié le 14 mars 2018 à 14:11
1) Dans ton code d'origine tu définis
serait plus dans la philosophie DoNet
Ensuite tu écris
idem 2 lignes plus loin
2) au data où tu télécharges la page Internet tu récupères une String : .718281828459045235360287471352662497757247093699959574966etc..........."
La valeur de cette String ne change pas
Au lieu de recharger cette valeur à chaque fois que tu appelles la fonction GetEulerFromDatabase tu la mets en variable à l'initialisation de ta classe en la téléchargeant une seule fois et à chaque fois que tu te sers de la fonction GetEulerFromDatabase tu te sers de cette valeur
si tu veux tu peux même mettre Valeur en paramètre de ta fonction GetEulerFromDatabase
autre chose
- Dans les propriétés du projet à l'onglet Compiler mets Option Strict et Option Explicit sur True
- Et à l'onglet Références décoches la Référence à Microsoft visual Basic
La première option t'oblige à déclarer toutes les variables et à respecter leurs types - > voir le au-dessus où tu mélanges valeur numérique et valeur String ( chaine de caractères)
La seconde option te permet de faire du vrai VB Net ( et non à mélanger du VB 6 avec VB Net : en passant remplace par
14 mars 2018 à 20:05