coolkikou
Messages postés2Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention 4 septembre 2008
-
4 sept. 2008 à 12:32
coolkikou
Messages postés2Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention 4 septembre 2008
-
4 sept. 2008 à 15:30
Bonjour à tous,
Je travaille actuellement sur un petit projet ou je dois parser un fichier. Voici un extrait du code :
if ((match = monRegexp1.Match(ligne)).Success)
{
//traitement quelquonque
}
elseif
((match = monRegexp2.Match(ligne)).Success)
{
//traitement quelquonque
}
[...]
Sachant que j'ai une 50aine d'expressions, ca comment a faire beaucoup de if :( :(
Y a t il un moyen de donner ma 'ligne' a une collection de RegExp pour avoir en retour la RegExp qui match afin de faire le traitement associé ?
Dans l'idée ca serait ca : maRegExpQuiMatch = CollectionDeRegExp.Match(ligne)
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 4 sept. 2008 à 13:26
Bonjour,
Personnellement, en considérant que tes traitements sont différents pour chaque expression régulière, je vois une solution:
Tu créé une classe abstraitre qui sera hérité par tous tes objets contenant les traitement. Exemple:
public abstract class RegExProcess
{
private Regex _reg;
public RegExProcess(Regex reg)
{
_reg = reg;
}
public Regex Reg
{
get { return _reg; }
}
public abstract void Execute();
}
Ensuite, il te suffit de créer chaque classe dérivant de cette dernière avec la méthode Execute() spécifique à la classe.
Puis, tu créé une classe collection de ta classe abstraite
Exemple:
public class RegExProcessList : List<RegExProcess>
{
//...
}
Il te suffira alors de faire dans ton code:
foreach(RegExProcess curRegExProcess in list)
{
if ((match = curRegExProcess.Reg.Match(ligne)).Success)
{
curRegExProcess.Execute();
}
}
Voila en gros mon idée.
Désolé s'il y a des fautes et pour les non-commentaires.