Récupérer doc. stocké sur web lettre par lettre

Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention - 11 mars 2018 à 22:36 - Dernière réponse : NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention
- 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 ?

Merci d'avance, bonne soirée.
Afficher la suite 

Votre réponse

13 réponses

vb95 1630 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - Modifié par vb95 le 12/03/2018 à 17:01
0
Merci
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

vb95 1630 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention > Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention - 13 mars 2018 à 23:32
bonjour
Dans ce cas la solution de télécharger une seule et unique fois est la meilleure
Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention > vb95 1630 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - 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 1630 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention > Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention - 14 mars 2018 à 13:57
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_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention - 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 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 14 mars 2018 à 22:07
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.
Commenter la réponse de vb95
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 12 mars 2018 à 18:23
0
Merci
Pour voir les Summary, il faut copier le fichier XML accolé à ton DLL.
Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention - 13 mars 2018 à 18:50
C'est à dire ? Mettre le fichier et la DLL dans un même dossier ?
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 13 mars 2018 à 20:06
Oui
Renaud42_ 71 Messages postés dimanche 18 juin 2017Date d'inscription 8 juin 2018 Dernière intervention > NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 13 mars 2018 à 20:54
Merci beaucoup, cela fonctionne.
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 14 mars 2018 à 18:34
Dans ce cas, pense à marquer la question comme résolue (petit engrenage -> "Marquer comme résolu")
vb95 1630 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - 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
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.