Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019
-
Modifié le 11 mars 2018 à 23:17
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023
-
14 mars 2018 à 22:07
Bonsoir,
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 ?
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié le 12 mars 2018 à 17:01
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.............."
Quant à ta seconde question je ne sais point
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019 13 mars 2018 à 18:51
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...
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019 13 mars 2018 à 23:32
bonjour
Dans ce cas la solution de télécharger une seule et unique fois est la meilleure
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019
>
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023 14 mars 2018 à 12:48
Bonjour,
Et il n'est vraiment pas possible de récupérer la page caractère par caractère ?
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019 Modifié le 14 mars 2018 à 14:11
Bonjour
1) Dans ton code d'origine tu définis
Dim data As String = ""
Dim data As String =String.Empty"
serait plus dans la philosophie DoNet
Ensuite tu écris
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
VBNewline
par
Environment.Newline
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019 14 mars 2018 à 20:05
Merci pour ta réponse, cependant, dans tout les cas, si je fais
data = 2
, VB convertit le 2 en String automatiquement don ça change rien au final ?
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 12 mars 2018 à 18:23
Pour voir les Summary, il faut copier le fichier XML accolé à ton DLL.
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019 13 mars 2018 à 18:50
C'est à dire ? Mettre le fichier et la DLL dans un même dossier ?
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 13 mars 2018 à 20:06
Oui
Renaud42_
Messages postés72Date d'inscriptiondimanche 18 juin 2017StatutMembreDernière intervention18 décembre 2019
>
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023 13 mars 2018 à 20:54
Merci beaucoup, cela fonctionne.
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 14 mars 2018 à 18:34
Dans ce cas, pense à marquer la question comme résolue (petit engrenage -> "Marquer comme résolu")
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 14 mars 2018 à 18:38
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