Décortiquer la source d'une page HTML pour en extraire les infos

Résolu
Siteauludo Messages postés 60 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 15 mai 2007 - 18 mars 2006 à 17:33
gyzmo222 Messages postés 66 Date d'inscription lundi 27 juin 2005 Statut Membre 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

4 réponses

gyzmo222 Messages postés 66 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 2 juin 2006 1
19 mars 2006 à 11:05
//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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
19 mars 2006 à 13:33
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;
}
}
3
Siteauludo Messages postés 60 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 15 mai 2007
19 mars 2006 à 11:44
Cher Gizmo, quelle perfection, quelle rapidité, quel style !!!

Merci beaucoup !
Siteauludo
0
gyzmo222 Messages postés 66 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 2 juin 2006 1
19 mars 2006 à 17:19
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
0
Rejoignez-nous