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

Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 décembre 2019
- Modifié le 11 mars 2018 à 23:17
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
- 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.

2 réponses

vb95
Messages postés
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151
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

0
Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 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...
0
vb95
Messages postés
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151 > Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 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
0
Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 décembre 2019
> vb95
Messages postés
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022

14 mars 2018 à 12:48
Bonjour,
Et il n'est vraiment pas possible de récupérer la page caractère par caractère ?
0
vb95
Messages postés
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151 > Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 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
0
Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 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 ?
0
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
12 mars 2018 à 18:23
Pour voir les Summary, il faut copier le fichier XML accolé à ton DLL.
0
Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 décembre 2019

13 mars 2018 à 18:50
C'est à dire ? Mettre le fichier et la DLL dans un même dossier ?
0
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
13 mars 2018 à 20:06
Oui
0
Renaud42_
Messages postés
72
Date d'inscription
dimanche 18 juin 2017
Statut
Membre
Dernière intervention
18 décembre 2019
> NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022

13 mars 2018 à 20:54
Merci beaucoup, cela fonctionne.
0
NHenry
Messages postés
14927
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
162
14 mars 2018 à 18:34
Dans ce cas, pense à marquer la question comme résolue (petit engrenage -> "Marquer comme résolu")
0
vb95
Messages postés
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151
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
0