Xmlreader en winform

Résolu
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012 - 22 mars 2012 à 16:56
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 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

24 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
22 mars 2012 à 19:32
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
---
3
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 21:03
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
3
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 18:15
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
22 mars 2012 à 18:43
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
---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 18:47
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 18:54
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
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 19:06
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
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 19:27
richTextBox1.LoadFile(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");

ne donne rien non plus :S


lulu
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 19:35
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 19:49
Et ben

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


Whismeril
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 19:56
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 20:17
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
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 20:28
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 20:31
Je te proposai plutôt ce code pour Version 1.0 etc... que tu disais ne pas vouloir apparaitre


Whismeril
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 20:35
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
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
22 mars 2012 à 22:02
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 mars 2012 à 22:12
De rien


Whismeril
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 mars 2012 à 14:30
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
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
23 mars 2012 à 15:48
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 mars 2012 à 17:25
Pour tester cette méthode il faut que tu l'appelles.

Par exemple dans le constructeur de ta form

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

}



Whismeril
0
Rejoignez-nous