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

Messages postés
418
Date d'inscription
mardi 4 février 2014
Dernière intervention
24 septembre 2018
- 11 mars 2018 à 16:36 - Dernière réponse :
Messages postés
418
Date d'inscription
mardi 4 février 2014
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
Afficher la suite 

Votre réponse

3 réponses

Messages postés
1711
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
21 novembre 2018
Modifié par vb95 le 11/03/2018 à 18:32
0
Merci
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





Messages postés
418
Date d'inscription
mardi 4 février 2014
Dernière intervention
24 septembre 2018
- 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 },
Commenter la réponse de vb95
Messages postés
23317
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2018
11 mars 2018 à 19:03
0
Merci
Bonjour,
Les données que tu cherches à manipuler semblent être du JSON
Donc regarde ceci : https://www.newtonsoft.com/json/help/html/DeserializeObject.htm


Messages postés
418
Date d'inscription
mardi 4 février 2014
Dernière intervention
24 septembre 2018
- 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 .
Commenter la réponse de jordane45
Messages postés
1711
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
21 novembre 2018
Modifié par vb95 le 11/03/2018 à 22:06
0
Merci
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. 
Messages postés
418
Date d'inscription
mardi 4 février 2014
Dernière intervention
24 septembre 2018
- 15 mars 2018 à 20:45
Bonsoir vb95,
Ton code fonctionne très bien
Merci beaucoup pour ton aide
Commenter la réponse de vb95

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.