[C Sharp] Expressions Régulières sous ASP.Net

Expressions Régulières sous ASP.Net [C Sharp] - C#/.NET managed - Programmation

Marsh Posté le 22-08-2006 à 16:30:55    

Bonjour,
 
J'ai des problèmes pour utiliser les expressions régulières sous C# et ASP.Net2 :
 
je souhaite récuperer des lignes contenant un mot clé dans un texte (journal)
 
Exemple :
2006/08/22 11:11:12 bla bla bla bla err bla bla1<br>
2006/08/22 11:11:12 bla bla bla bla bla bla2<br>
2006/08/22 11:11:12 bla bla bla bla bla bla3<br>
2006/08/22 11:11:12 bla bla bla bla err bla bla4<br>
 
je cherche lesl ignes qui ont "err"
 
le résultat devra me donner :
2006/08/22 11:11:12 bla bla bla bla err bla bla1<br>
2006/08/22 11:11:12 bla bla bla bla err bla bla4<br>
 
mais je n'y arrive pas, j'ai cherché et impossible de réussir, j'ai testé cela :
(\\d{2,4}/\\d{2,2}/\\d{2,2} \\d{2,2}:\\d{2,2}:\\d{2,2}).+(err).+(<br> )
 
Cela ne marche pas
 
Quelqu'un peut-il me dire comment faire ?
 
Merci d'avance
 
mkolivier

Reply

Marsh Posté le 22-08-2006 à 16:30:55   

Reply

Marsh Posté le 24-08-2006 à 16:00:14    

Je pense pas qu'une expression régulière soit bonne dans ce cas.
 
Pourquoi ne pas te ballader dans le texte ligne par ligne, et pour chaque ligne tester si elle contient "err" avec IndexOf ?

Reply

Marsh Posté le 24-08-2006 à 16:03:43    

Je le fais déjà et je souhaiterai améloirerm on code c'est pour cela

Reply

Marsh Posté le 24-08-2006 à 16:08:04    

"2006/08/22 11:11:12 "
=> taille fixe : 20 caractères
 
donc tu fais, pour chaque ligne :

Code :
  1. foreach (string l in lignes)
  2.       {
  3.            if (l.Substring(20, 3) == "err" )
  4.            {
  5.                  MessageBox.Show(l);
  6.            }
  7.       }


 
Je ne vois pas comment tu peux optimiser plus.


Message édité par MagicBuzz le 24-08-2006 à 16:08:36
Reply

Marsh Posté le 24-08-2006 à 17:02:40    

je laisse tomber, c'est trop compliqué, je n'y arriverai jamais, cela fait 15 jours que je teste et bon tant pis

Reply

Marsh Posté le 24-08-2006 à 17:04:33    

essaie mon truc... de toute façon, comme l'a dit hassbak, les regexp ne sont pas du tout adaptées à ton problème

Reply

Marsh Posté le 24-08-2006 à 17:18:28    

Et pour quelles raisons un RegEx ne pourrait pas être utilisé ? on s'en sert bien pour parser du texte, donc je ne vois pas trop...

Reply

Marsh Posté le 24-08-2006 à 17:23:23    

on n'a pas dit qu'il ne pouvait pas être utilisé, on a dit qu'il n'était pas adapté.
 
c'est comme vouloir manger des petits pois avec une spatule. ça marche, c'est pas pas top adapté.
 
ici, tout ce qui est devant "err" a une taille fixe, donc il est à la fois plus simple et plus rapide de regarder directement à l'offset et regarder ce qu'on y trouve, que de faire une regexp qui, quelquesoit ses perfs, fa se faire chier à parcourir tout le fichier sans aucun repère valable.

Reply

Marsh Posté le 24-08-2006 à 17:24:27    

ps: au départ, je croyais que ton "err" était en début de ligne, après la date (comme dans tout bon journal de log). mais en fait, c'et pas le cas (c'est ballo)
 
du coup indexof ou regexp ne font en effet aucune différence.

Reply

Marsh Posté le 24-08-2006 à 17:26:28    

euh je crois que mon exmple vous a induit en erreur, car err peut se trouver n'importe où sur la ligne, du mois, après la date et heure mais avant le <br>:
 
donc moi je veux récupérer des items :
<date> <heure> ...err......<br>
(sans le <br> )


Message édité par mkolivier le 24-08-2006 à 17:27:40
Reply

Marsh Posté le 24-08-2006 à 17:26:28   

Reply

Marsh Posté le 24-08-2006 à 17:29:46    

yes, je m'en suis rendu compte en regardant à nouveau ton exemple.
 
pour la regexp, à priori, t'as bien beaucoup de () qui servent à rien, et tu n'as pas celles qui sont importantes... vire-les toutes, et met des () autour de toute la chaîne, afin de récupérer en match0 la ligne entière (met pas le <br> dans les () si t'en veut pas)
 
de mémoire, ça marche comme ça...


Message édité par MagicBuzz le 24-08-2006 à 17:29:59
Reply

Marsh Posté le 24-08-2006 à 17:29:59    

euh je prends err pour erreur ou error, ou err car (ce n'est pas moi qui est programmé nos logs) mais je dois les vérifier, donc je checke uniquement les lignes qui contiennent err, sinon evidemment j'aurai formaté les lignes de nos logs pour répondre à une syntaxe cohérente ;-)

Reply

Marsh Posté le 24-08-2006 à 17:31:39    

et puis en ce moment nous n'avons pas bcp d'erreurs donc pourquoi boucler sur des millers de lignes au lieu de chercher uniquement les quelques lignes en erreur


Message édité par mkolivier le 24-08-2006 à 17:31:59
Reply

Marsh Posté le 24-08-2006 à 18:14:11    

parceque pour chercher les quelques lignes en erreur, faut boucler sur toutes les lignes, c'est un peu logique nan ?
 

Reply

Marsh Posté le 24-08-2006 à 18:26:53    

non evidemment mais je voulais le faire en RegEx, tant pis

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed