Décortiquer la source d'une page HTML pour en extraire les infos [Résolu]

Messages postés
60
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
15 mai 2007
- - Dernière réponse : gyzmo222
Messages postés
66
Date d'inscription
lundi 27 juin 2005
Dernière intervention
2 juin 2006
- 19 mars 2006 à 17:19
Bonjour,


Voilà, j'utilise Visual Studio C# 2005 Express (Donc Frameworks 2.0), et je suis en train de faire une petite application qui devrai prendre la source d'une page web, et trouver quelques infos dedans.


Exemple concret (c'est ce que je veux faire) : sur http://quotes.ubs.com/quotes/language=F, il y a un tableau contenant des valeurs, et je souhaiterai afficher un condensé de ces infos, c'est à dire extraire les infos en rouge dans la source suivante :

---------------------------------------------
(début)...
Name,
Close,
Low,
High,
Last,
Chg. %,

----

SMI,
8'017.96,
8'035.45,
8'090.19,
8'047.12,
+0.36,

----

DJ Industr Avg Indx,
11'253.24,
11'254.12,
11'290.07,
11'279.65,
+0.23,

----

FTSE 100,
5'999.4,
,
,

...(fin)
---------------------------------------------

Voilà, il faudrai que je puisse isoler les chiffres en rouge de ce paquet de texte. Les chiffre en rouge et en bleu changeront chaque jour, mais le reste du code ne changera pas.

Si vous avez une idée, elle sera la bienvenue, car franchement je n'ai pas la moindre idée de la manière de procéder.

Merci beaucoup d'avance,

Siteauludo
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
66
Date d'inscription
lundi 27 juin 2005
Dernière intervention
2 juin 2006
3
Merci
//lire page
try
{
int k=0;
string[] split = null;
// Création d'une instance de StreamReader pour permettre la lecture de notre fichier
StreamReader monStreamReader = new StreamReader(@"C:\cheminfichier\page.html");
string ligne = monStreamReader.ReadLine();

// Lecture de toutes les lignes et affichage de chacune sur la page
while (ligne != null)
{
if (ligne.Length > 60) //demande une ligne plus longue que 60 caractères
{
ligne = ligne.Substring(46, 13);
string result = "";
string delimStr = "<>";
char[] delimiter = delimStr.ToCharArray();

if (ligne.Substring(0, 1) == ">") //vérifie que le premier élement de la ligne (index 46) soit >
{
split = ligne.Split(delimiter, 3); //coupe sur les delimiter en max 3 parties
ligne = split[1]; //récupère la partie numéro 2 (index 1)

try
{
int.Parse(ligne.Substring(0, 1)); //vérifie que ca soit un nombre sinon bang :p
result = ligne;
k++;

if (k == 4) { label1.Text += result; k = 0; }
} catch { label2.Text +"bang"; k 0; }
}
else
{
k = 0;
}
}
ligne = monStreamReader.ReadLine();
}
// Fermeture du StreamReader (attention très important)
monStreamReader.Close();
}
catch (Exception ex)
{
// Code exécuté en cas d'exception
label2.Text = "Une erreur est survenue au cours de la lecture !";
//label2.Text = ex.Message;
}

Voila, à ne pas changer: la longueur de la ligne avant le nombre à récupérer et les signes <> aisi que l'ordre (4).
En rouge le label des erreurs, en mauve, celui ou je récupère les nombres souhaités

Merci gyzmo222 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de gyzmo222
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
Gyzmo, quand tu utilises un try/catch si un objet nécessite l'appel d'une fonction Close ou Dispose utilises un try/catch/finally, ou une close using.

SreamReader sr = null;

try
{
// ..
}
catch
{
// ..
}
finally
{
if ( sr != null )
{
sr.close( );
sr = null;
}
}

Merci Lutinore 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
60
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
15 mai 2007
0
Merci
Cher Gizmo, quelle perfection, quelle rapidité, quel style !!!

Merci beaucoup !
Siteauludo
Commenter la réponse de Siteauludo
Messages postés
66
Date d'inscription
lundi 27 juin 2005
Dernière intervention
2 juin 2006
0
Merci
Jamais prétendu que mon code était optimisé, il est meme brouillon mais il fonctionne... C'est un coup de main, je n'ai pas la pretention de faire le boulo des autres à leur place. Effectivement, un finally l'optimiserait d'avantage et comme ressources non managés, il serait mieux de mettre un close pour libérer l'espace mémoire
Commenter la réponse de gyzmo222

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.