Récupérer des données à partir d'un code HTML

Résolu
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - 11 mars 2018 à 16:36
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 - 15 mars 2018 à 20:45
Bonjour/Bonsoir,
Comme le titre l'indique, je voulais récupérer des données à partir d'un code HTML qui es coller dans une RichTextBox, puis les mettre dans une ListView à 3 colonnes
j'ai beau chercher je n'ai rien trouver, j'ai pensé à une méthode mais cela me permet de récupérer les données de la première la première ligne
{"num_step":1,"quantity":{"*":4},"necessary":"*:6"}
pas plus que ça
Voici un exemple du code HTML :
[{"num_step":1,"quantity":{"*":4},"necessary":"*:6"},{"num_step":2,"quantity":{"*":11},"necessary":""},{"num_step":3,"quantity":{"*":7},"necessary":""},{"num_step":4,"quantity":{"*":4},"necessary":""},{"num_step":5,"quantity":[],"necessary":"*:54"},{"num_step":6,"quantity":{"*":2},"necessary":""},{"num_step":7,"quantity":{"*":10},"necessary":""},{"num_step":8,"quantity":{"*":9},"necessary":""},{"num_step":9,"quantity":{"*":4},"necessary":"*:25"},{"num_step":10,"quantity":{"*":5},"necessary":""},{"num_step":11,"quantity":{"*":5},"necessary":""},{"num_step":12,"quantity":{"*":6},"necessary":""},{"num_step":13,"quantity":[],"necessary":""},{"num_step":14,"quantity":{"*":7},"necessary":""},{"num_step":15,"quantity":{"*":6},"necessary":""},{"num_step":16,"quantity":{"*":6},"necessary":"*:37"},{"num_step":17,"quantity":{"*":4},"necessary":""},{"num_step":18,"quantity":{"*":6},"necessary":"*:39"},{"num_step":19,"quantity":{"*":10},"necessary":"*:28"},{"num_step":20,"quantity":{"*":7},"necessary":""},{"num_step":21,"quantity":{"*":13},"necessary":"*:34"},{"num_step":22,"quantity":{"*":8},"necessary":""},{"num_step":23,"quantity":{"*":11},"necessary":""},{"num_step":24,"quantity":[],"necessary":""},{"num_step":25,"quantity":{"*":14},"necessary":""},{"num_step":26,"quantity":{"*":10},"necessary":"*:46"},{"num_step":27,"quantity":{"*":18},"necessary":""},{"num_step":28,"quantity":{"*":11},"necessary":"*:19"},{"num_step":29,"quantity":{"*":11},"necessary":"","end":true}}];

Voici à quoi ça devrait ressembler à la fin


Première Colonne -> Numéro de l'étape, exemple : "num_step":1," (le numéro de l'étape qui sera afficher dans la ListView est 1)
Deuxième Colonne -> Quantité, exemple : "quantity":{"*":6} (la quantité qui sera afficher dans la ListView est 6)
"quantity":[] (comme il y a pas de valeur, la cellule en question restera vide)
Troixième Colonne -> Nécessaire, exemple : "necessary":"*:34" (la quantité Nécessaire qui sera afficher dans la ListView est 34)
"necessary":"" (comme il y a pas de valeur, la cellule en question restera vide)
merci d'avance pour votre aide

3 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 11 mars 2018 à 18:32
Bonjour
Si tu récupères bien les données pour la première ligne qu'est-ce qui te bloque pour récupérer les données des autres lignes ?

On remarque d'abord que chaque ligne comporte 3 éléments et que chaque ligne est séparée par },{
On ne peut prendre que la virgule car les 3 éléments à l'intérieur d'une ligne sont eux aussi séparés par une virgule
Donc un Split sur chaque ligne avec },{ comme séparateur devrait te donner un tableau de lignes
Dans chaque élément de ce tableau de lignes tu refais un Split sur chaque élément avec la virgule
Cela te donne un sous-tableau de 3 éléments : num_step , quantity et necessary
Dans chacun des éléments de ce sous-tableau suffit de récupérer la valeur numérique si celle-ci est présente

1) le tableau des lignes
[{"num_step":1,"quantity":{"*":4},"necessary":"*:6"
"num_step":2,"quantity":{"*":11},"necessary":""
"num_step":3,"quantity":{"*":7},"necessary":""
"num_step":4,"quantity":{"*":4},"necessary":""
"num_step":5,"quantity":[],"necessary":"*:54"
etc ........

2) le sous-tableau de la première ligne avec les 3 éléments de ta listview
[{"num_step":1
"quantity":{"*":4}
,"necessary":"*:6"

3) le sous-tableau de la seconde ligne
"num_step":2
"quantity":{"*":11}
"necessary":""

Petite remarque : si dans les éléments quantity et necessary on trouve le caractère * il y a une valeur numérique à trouver





0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
11 mars 2018 à 19:42
la méthode consiste à rechercher le string qui est entre deux string
par exemple , rechercher le string qui est entre "num_step": et ,"quantity"
mais s'il le trouve dans la première ligne, il ne va pas plus loin
pour le Split je ne l'ai jamais utilisé, mais j'ai trouvé un exemple bien expliqué
pour le test j'ai créé 2 RichTextBox, la première pour le texte et la 2e pour le résultat
Voici le code :
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim I As Integer
Dim aryTextFile() As String
aryTextFile = RichTextBox1.Text.Split("},{")
For I = 0 To UBound(aryTextFile)
RichTextBox2.Text = RichTextBox2.Text & aryTextFile(I) & ChrW(10)
Next
End Sub

Voici le résultat :
[{"num_step":1,"quantity":{"*":4
,"necessary":"*:6"
,{"num_step":2,"quantity":{"*":11
,"necessary":""
,{"num_step":3,"quantity":{"*":7
,"necessary":""
,{"num_step":4,"quantity":{"*":4
,"necessary":""
,{"num_step":5,"quantity":[],"necessary":"*:54"
,{"num_step":6,"quantity":{"*":2
,"necessary":""
,{"num_step":7,"quantity":{"*":10
,"necessary":""

mais on dirait qu'il séparent même quand il y a que ça },
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
11 mars 2018 à 19:03
Bonjour,
Les données que tu cherches à manipuler semblent être du JSON
Donc regarde ceci : https://www.newtonsoft.com/json/help/html/DeserializeObject.htm


0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
15 mars 2018 à 20:44
Bonsoir jordane45,
Désolé de ne pas t'avoir répondu plus tôt
non je t'assure que c'est du HTML vu que je suis sur Google Chrome et je fait clic droit puis je choisi inspecter pour copier une partie du code .
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 11 mars 2018 à 22:06
Salut Kikou93
C'est normal que le résultat du split ne fonctionne pas car split ne prend qu'un seul caractère comme séparateur
J'ai trouvé une solution très rapide:
2 Textbox, une Listview et un bouton
La première TextBox (nommée Chainehtml) reçoit tout le code HTML et la seconde TextBox (nommée Tableauchainehtml) reçoit les différents éléments de ce même code ( un élément par ligne )
Prévoir la ScrollBar vertical pour cette seconde TextBox
La Listview est en mode Détails avec les 3 colonnes

Et voici le code de la Form

Public Class Form1

    Private Texte As String

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Texte = Chainehtml.Text

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim arrayTextFile As String() = Chainehtml.Text.Split(","c) ' pour chaque paramètre
        For i = 0 To arrayTextFile.Length - 1
            Tableauchainehtml.Text = Tableauchainehtml.Text & arrayTextFile(i) & Environment.NewLine
        Next
        Dim Index = 0
        For i = 0 To (arrayTextFile.Length \ 3) - 1
' à chaque tour de boucle 3 paramètres donc une ligne pour la listview
            ListView1.Items.Add(New ListViewItem(New String() {Parametre(arrayTextFile(Index)), Parametre(arrayTextFile(Index + 1)), Parametre(arrayTextFile(Index + 2))}))
            Index = Index + 3
        Next

    End Sub

    Private Function Parametre(Chaine As String) As String

        Dim Retournombre As String = String.Empty
        For j = 0 To Chaine.Length - 1
            If Chaine.Substring(j, 1) >= "0" And Chaine.Substring(j, 1) <= "9" Then
                Retournombre = Retournombre & Chaine.Substring(j, 1)
            End If
        Next
        Return Retournombre

    End Function

End Class

</code>

En cas de soucis envoie moi un message privé avec ton adresse email et je t'enverrais le zip du projet que j'ai fait

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
kikou93 Messages postés 417 Date d'inscription mardi 4 février 2014 Statut Membre Dernière intervention 24 septembre 2018 1
15 mars 2018 à 20:45
Bonsoir vb95,
Ton code fonctionne très bien
Merci beaucoup pour ton aide
0
Rejoignez-nous