Xmlreader en winform [Résolu]

Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
- - Dernière réponse : Whismeril
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
- 23 mars 2012 à 20:14
Bonjour à tous ,

Je vous pose mon problème :

en naviguant sur la toile et sur le forum je ne trouve que des exemples c# console , moi j'utilise le mode winform c'est pour celà que je vous pose la question suivante : Comment Afficher un fichier Xml en application winform
pâr exemple dans un label , RichText ... ect

j'ai un programme qui marche en application console le voici :


XmlReader reader = XmlReader.Create(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");
while (!reader.EOF)
{
reader.Read();
Console.Write(reader.Value); }
reader.Close();
Console.Read();


il fonctionne de toute beauté seulement je n'arrive pas a l'adapter pour mon application winform :(

un petit coup de pouce de votre part ferait un grand Heureux :)

Merci !

lulu
Afficher la suite 

20/24 réponses

Meilleure réponse
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
3
Merci
Bonjour,

Et en reprenant le message de whismeril ?
richTextBox1.Text += reader.Value;

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---

Dire « Merci » 3

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

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
3
Merci
Oui il faut que échappe les " avec un \ devant:

"version="1.0" encoding="utf-8""

Et si tu veux écrire un \ il faut l'échapper aussi, ça devient vite galère avec un chemin d'accès
C:\Temp\Temp2\Temp\Temp2 devient "C:\\Temp\\Temp2\\Temp\\Temp2" que tu peux simplifier par @"C:\Temp\Temp2\Temp\Temp2", en gros @ signifie ce qui suit est un chemin et \ n'est pas le caractère d'échappement.

Quand à mes capacités, en tant qu'autodidacte il arrive que mes propositions ne soient pas les plus simple par méconnaissance de certaines fonctions.

Quoiqu'il en soit pour ton besoin, je pense que les Regex seraient bien.

Regex maRegex = new Regex(@"[a-z]+[ score ][\d+]");

Ce code te crée une regex dont le filtre [a-z]+[ score ][\d+] veut dire:
[a-z]+ : d'abord un groupe composé d'au moins une lettre
[ score ] : puis exactement " score "
[\d+] enfin un groupe composé d'un moins un chiffre, attention à @ avant sinon il te faudra échapper le \

Whismeril

Dire « Merci » 3

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

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Il faudrait que je remplace "Console" par autre chose qui ce trouve en winform , seulement je n'arrive pas a trouver les commandes utiles


lulu
Commenter la réponse de fmarinelli
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
0
Merci
Bonjour,

Tu as fais quoi pour envoyer sur une form ?
As-tu essayer d'ajouter dans un TextBox ?
Message d'erreur ? (le quel ?)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Bonjour et merci votre participation

quand je colle mon code dans une form , l'or du debug , celà m'ouvre ma forme sans rien , aucune erreur.

J'aurai aimer savoir si par exemple je veux l'afficher dans une textbox comme vous me le proposez , qu'elle "fonction" je dois utiliser

exemple : Textbox. ?


lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
Bonsoir,

pour afficher dans un textbox par exemple:

A chaque itération
TextBox1.text += reader.Value;

Là tes valeurs seront ajoutée bout à bout, c'est pas forcément joli.
Sinon tu peux utiliser un stringbuilder, avec sa méthode AppendLine chaque texte ajouté l'est sur une ligne qui lui est propre.

Avec un richtextbox, il y'a la méthode LoadFile,qui le fait tout seul, ou à chaque itération tu peux remplir un tableau de string que tu passes à la propriété Lines à la fin.


Whismeril
Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
TextBox1.text += reader.Value;
celà ne m'affiche rien ?

pour la richtexbox , j'arrive a lire des fichier
avec :
richTextBox1.Text = File.ReadAllText(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");

seulement celà ne m'interesse pas car il m'affiche tout ce qui se trouve dans mon fichier Xml , moi je voudrais seulement les elements de ma liste qui se trouve de dans exemple :

Joueur1 Score 100 ;



* Pour la richTextbox => richTextBox1.LoadFile= X(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");

Je ne vois pas quoi mettre pour X ?


Encore merci beaucoup
lulu
Commenter la réponse de fmarinelli
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
richTextBox1.LoadFile(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");

ne donne rien non plus :S


lulu
Commenter la réponse de fmarinelli
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Merci c'est parfait :D

Une petite question pour finir j'affiche :

version="1.0" encoding="utf-8"


robert
0

=> le version"1.0" ..... j'aimerais bien que ca ne s'affiche pas , une idée ?

Merci a vous !

lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
Et ben

tu testes la valeur de reader.Value et si elle te convient tu l'ajoute au richtexxtbox.


Whismeril
Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
En gros tu voudrais que je recupère les données de mon fichier Xml et que je ne l'affiche que aprés ?

Mais pour recuperer que

Robert et 0 il faudrai quoi comme commande ?

lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
pour la ligne sur la version:
if (reader.Value != "Tape ici le texte tu ne veux pas") richTextBox1.Text += reader.Value; 


Pour "Robert score 0", le plus simple si "score" est toujours écrit strictement pareil c'est d'utiliser la méthode Replace:
reader.Value.Replace("score ", "");//remplace "score " par rien


S'il y a des variations, tu peux utiliser reader.Value.split, c'est une méthode qui découpe une chaine en plusieurs morceau en fonction de séparateurs, ici l'espace et retourne un tableau, ensuite il faut que tu joigne les valeurs de l'index 0 et l'index 2.Mais il faut être sûr qu'il y ait toujours 3 mots.

Sinon il y a les expressions régulières (Regex) qui te permettent de tester si une string correspond à un format, et si oui d'en extraire des morceaux. Cette source permet de voir comment ça fonctionne au début, (pas trop pour l'extraction de groupes).
Whismeril
Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Mercii pour ton aide , je vais regarder tout sa !

seulement if (reader.Value != "Tape ici le texte tu ne veux pas") richTextBox1.Text += reader.Value;

fonctionne trés bien si je veux supprimer un element de ma liste : Soit Robert Soit 0 mais celà ne fonctionne pas pour le reste :S

En tout cas je vous remerci et passez une bonne soirée
lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
Je te proposai plutôt ce code pour Version 1.0 etc... que tu disais ne pas vouloir apparaitre


Whismeril
Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Oui j'ai bien comprit j'ai essayer et sa ne supprime pas "Version ...."
Je me suis dit que le code était ( faux : je ne doute pas de tes capacité puisque je viens demmander de l'aide ) ... du coup j'ai essayer de taper robert ... et effectivement sa a bien supprimer robet mais quand je colle

version="1.0" encoding="utf-8"
Ca ne fonctionne pas
de 1 : parceque il y'a des "" dans l'expression du coup sa pertube visual ^^
de 2 : j'ai essayer de mettre que "version" et la sa ne supprime pas le mot


lulu
Commenter la réponse de fmarinelli
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Merci , j'ai pour l'instant esquivé en échappant les " par des \ , je vais me pencher dans les regex.

Merci , problème résolut.
Bonne soirée

lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
De rien


Whismeril
Commenter la réponse de Whismeril
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
Bonjour,

pour la regex je te propose de tester ce code

        private void TestRegex()
        {

            string[] tab = { "version="1.0" encoding="utf-8"", "ça ne marche pas", "Robert score 10", "Marche pas non plus", "jEan    score        22.", "Robert scure 10"};

            foreach (string texte in tab)
            {
                Regex maRegex = new Regex(@"(?([a-z]|[A-Z])+)[ ]+score[ ]+(?\d+)");//initialise la regex
                /* explications de la syntaxe
                 * [a-z] quelque chose compris entre a et z => une minuscule
                 * [A-Z] quelque chose compris entre A et Z => une majuscule
                 * [a-z]|[A-Z]une nimuscule ou une majuscle
                 * ([a-z]|[A-Z])+) une nimuscule ou une majuscle ou moins 1 fois
                 * (?([a-z]|[A-Z])+) si je trouve "une nimuscule ou une majuscle ou moins 1 fois", je stocke le resultat dans le groupe prenom
                 * [ ]+ au moins un epsace
                 * score exactement ecrit comme ça
                 * \d un décimal (attention j'ai mis @ au début pour ne pas avoir de multiples \)
                 * \d+ un decimal au moins une fois
                 * (?\d+) un decimal au moins une fois stocké dans le groupe points
                 */

                Match resultat = maRegex.Match(texte);
                if (resultat.Success)//si ça colle, on recupére les valeurs des groupes et on les affiche
                {
                    string prenom = resultat.Groups["prenom"].Value;
                    string points = resultat.Groups["points"].Value;

                    MessageBox.Show(string.Format("{0} a obetenu {1} point(s)", prenom, points));
                }
                else MessageBox.Show(string.Format("'{0}' ne correpond pas au format",texte),"Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }



Whismeril
Commenter la réponse de Whismeril
Messages postés
13
Date d'inscription
jeudi 26 janvier 2012
Statut
Membre
Dernière intervention
23 mars 2012
0
Merci
Ah cool Merci ;)

eee juste ou dois je rentré mon chemin d'accès ? car je complile trés bien aucune erreur aprés avoir inclue le bon using ^^ ...

mais rien ne se passe, donc j'ai bien relu le code et je me suis dit qu'il ne sais pas ou allez chercher les informations

Merci

lulu
Commenter la réponse de fmarinelli
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
Pour tester cette méthode il faut que tu l'appelles.

Par exemple dans le constructeur de ta form

Public Form1()
{
  TestRegex();
.....

}



Whismeril
Commenter la réponse de Whismeril