Découpé une variable

cirdec2000 Messages postés 24 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 22 avril 2020 - 16 févr. 2009 à 16:50
cirdec2000 Messages postés 24 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 22 avril 2020 - 20 févr. 2009 à 19:46
bonjour
j'ai une variable
exemple :

VariableText="[Gras]On apprend/Gras [Taille 1]tout à partir de zéro1"

je voudrais la découpé selon les balises [gras]/gras et [taille 1]/taille1
comment pourrais je faire ??

7 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
16 févr. 2009 à 17:00
Bonjour,

Il va te falloir jouer sur les expressions régulières:
using System.Text.RegularExpressions;
Class RegEx [ http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx ]
Ainsi, tu pourras analyser facilement tes chaînes de caractères et récupérer les valeurs. Ton pattern ne doit pas être très dur à trouver :)

Quelques liens codes sources:
http://www.csharpfr.com/codes/REMPLACER-CHAINE-COMPRISE-ENTRE-BORNES_34866.aspx
http://www.csharpfr.com/tutoriaux/UTILISATION-REGEX-CSHARP_557.aspx

+ un petit logiciel très pratique pour tester les expressions régulières:
http://www.ultrapico.com/Expresso.htm

Bon courage,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
16 févr. 2009 à 17:17
Y'a des regexp qui trainent sur le net pour XML. T'as qu'à remplacer les < et > par [ ] et tu devrais pouvoir t'en sortir.
0
cirdec2000 Messages postés 24 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 22 avril 2020
16 févr. 2009 à 17:35
oui mais le regex va pas juste me permettre de remplacer les balises ??

sinon moi j'étais partit sur ce code
c'est pour au final imprimer sur un ticket

int PlaceDebGras = texte.IndexOf("[Gras]",0);
int PlaceFinGras = texte.IndexOf("/Gras",0);

string PartieUn=texte.Substring(0,PlaceDebGras);
PrinterFont fontt = new PrinterFont(Elargissement.Normal, Taille.Moyen);
DrawText(PartieUn, Alignement.Gauche, new Point(0, 0), fontt);

string PartieDeux=texte.Substring(PlaceDebGras,PlaceFinGras+7);
PrinterFont fonttt = new PrinterFont(Elargissement.Normal, Taille.Grand);
DrawText(PartieDeux, Alignement.Gauche, new Point(0, 0), fonttt);

string PartieTrois=texte.Substring(PlaceFinGras+7,texte.Length-PlaceFinGras+7);
PrinterFont fontttt = new PrinterFont(Elargissement.Normal, Taille.TresGrand);
DrawText(PartieTrois, Alignement.Gauche, new Point(0, 0), fontttt);
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
16 févr. 2009 à 21:09
Tu peux remplacer, découper, lire, etc etc...
Bon, c'est clair que faut un peu connaître sinon tu vas perdre quelques heures :D

<hr />
-Blog-
-Site Perso-
0

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

Posez votre question
cirdec2000 Messages postés 24 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 22 avril 2020
17 févr. 2009 à 11:47
voila sur quelle code je suis partie

string maChaine = "[Gras]On apprend/Gras [Taille 1]tout1";
            MatchCollection matches = Regex.Matches(maChaine, @"\[(.+?)\](.*?)\/.+?\");

            foreach (Match match in matches)
            {
                string nomBalise = match.Groups[1].Value;
                string contenu = match.Groups[2].Value;
                Console.WriteLine(nomBalise);
                Console.WriteLine(contenu);
                Console.Read();
            }

le soucis c'est si ma variable est = a
string maChaine = "On[Gras] apprend/Gras [Taille 1]tout1";

et bien du coup le "On" saute
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
17 févr. 2009 à 11:58
Bonjour,

Y'a pas de secret. C'est à toi de prendre en compte tout ce qui est hors balise :)
Il te faut donc ne pas oublier un seul cas.
Exemple: [Taille 2 ]On[Gras] apprend/Gras2 [Taille 1]tout1.

Bon courage,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cirdec2000 Messages postés 24 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 22 avril 2020
20 févr. 2009 à 19:46
enfin terminé

dur dur quand même

merci a toi StormimOn


voila je mets le code pour ceux que ça intéresse

string maChaine = "";
//maChaine = "je travaille |[Gras]On apprend/Gras| |[Taille 1]tout à partir de zéro1|";
//maChaine = "|[None]je travaille /None||[Gras]On apprend/Gras| |[Taille 1]tout à partir de zéro1|";
//maChaine = "je travaille |[Gras]On apprend/Gras| enfin je pense |[Taille 1]tout à partir de zéro1| quoique";
//maChaine = "je travaille |[Gras]On apprend |[Taille 1] enfin je pense tout à partir de zéro1|le retour /Gras| quoique";
maChaine = "je travaille |[Gras]On apprend/Gras| |[Taille 1]tout à partir de zéro1||[Gras]fin/Gras| quoique";
 
 
string[] tab = maChaine.Split('|');
int NbrElementsTab = tab.Length;
 
for(int i = 0; i < NbrElementsTab; i++)
{

// @ annule l'effet du car d'échappement \
// \[ \] => entre [ ]
// () = groupement
// . = n'importe quel caractère
// + = 1 fois ou plus
// ? = 0 ou 1 fois
// * = 0 ou plusieurs fois
// {1,} = 1 ou plusieurs fois
 
 
MatchCollection matches = Regex.Matches(tab[i], @"\[(.+?)\](.*?)\/.+?\");
 
if(matches.Count > 0)// si balises trouvées
{
foreach(Match match in matches)
{
string nomBalise = match.Groups[1].Value;
string contenu = match.Groups[2].Value;
 
//Console.WriteLine(nomBalise);
Console.WriteLine(contenu);
}
}
else
{
if(tab[i] != "")
{
MatchCollection matches2 = Regex.Matches(tab[i], @"\[(.+?)\]([a-zA-Z0-9_ ]{1,})");
 
if(matches2.Count > 0)// si balises trouvées
{
foreach(Match match2 in matches2)
{
string nomBalise2 = match2.Groups[1].Value;
string contenu2 = match2.Groups[2].Value;
 
//Console.WriteLine(nomBalise2 + " testbalise2");
if(contenu2 != "")
{
Console.WriteLine(contenu2);
}
}
}
else
{
MatchCollection matches3 = Regex.Matches(tab[i], @"([a-zA-Z0-9_ ]{1,})\[(/.+?)\]");
 
if(matches3.Count > 0)// si balises trouvées
{
foreach(Match match3 in matches3)
{
string contenu3 = match3.Groups[1].Value;
string nomBalise3 = match3.Groups[2].Value;
 
//Console.WriteLine(nomBalise2 + " testbalise2");
if(contenu3 != "")
{
Console.WriteLine(contenu3);
}
}
}
else
{
Console.WriteLine(tab[i]);
}

}
 

}
}

}

Console.Read();
0