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

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

4 réponses

Répondre au sujet
gyzmo222 66 Messages postés lundi 27 juin 2005Date d'inscription 2 juin 2006 Dernière intervention - 19 mars 2006 à 11:05
+3
Utile
//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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de gyzmo222
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 19 mars 2006 à 13:33
+3
Utile
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;
}
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
Siteauludo 60 Messages postés mercredi 25 mai 2005Date d'inscription 15 mai 2007 Dernière intervention - 19 mars 2006 à 11:44
0
Utile
Cher Gizmo, quelle perfection, quelle rapidité, quel style !!!

Merci beaucoup !
Siteauludo
Commenter la réponse de Siteauludo
gyzmo222 66 Messages postés lundi 27 juin 2005Date d'inscription 2 juin 2006 Dernière intervention - 19 mars 2006 à 17:19
0
Utile
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.