Votre question

expression reguliere en c#.net

Tags :
  • Programmation
Dernière réponse : dans Programmation
4 Janvier 2007 13:01:25

[#ff7f00]
salut à tous!!!
j'ai un probleme de compilation!!!
D'abord, je veux declarer une variable en c# dans mon expression reguliere
par ex je veux declarer une ex.reguliere:
Regex cmd = new Regex("^[:D igit:]+[:space: ]$", var1);
et ce var1= a une requete sql qui cherche dans toutes les tables d'une base de données déjà crée s'il existe ou non;

explication:
j'ai une base de données avec 2 tables
quand l'utilisateur entre une chaine (par exp): 3 stylo
il va compiler :
3 juste
et stylo va chercher dans les 2 tables si existe il va dire juste sinon faux.

donc mon pb est que je sais pas creer ce code en c#!!!!!!!!!!
Veuillez svp me repondre rapidement et merci bcccccccccccccccp
:jap: 



Autres pages sur : expression reguliere net

4 Janvier 2007 13:39:19

Pour ton exemple, je ferai pas une expression régulière, mais plutôt un simple split sur les espaces!
Après je sais pas si les utilisateurs saisissent toujours des trucs simples comme "3 stylos"!
4 Janvier 2007 14:15:52

d'abord merci bien!!!
je veux quand l'utilisateur entre une chaine( n'importe )
chercher dans les tables s'il existe , stylo est juste un exemple
et verifier bien sur en mm temps s'il commense par un entier
Contenus similaires
4 Janvier 2007 14:19:57

C'est quoi le cadre de l'application? Tu peux pas forcer l'utilisateur avec une combobox par exemple?
Et sinon, la chaine que l'utilisateur rentre, ca doit toujours etre un entier suivi d'un mot. Si c'est le cas, le split fonctionne très bien!
4 Janvier 2007 14:24:34

la cadre de l'application est compilation
wi c'est ca mon but c'est que l'utilasteur renre une chaine compoée d'un entier suivi d'un mot, mais ce mot doit etre exister dans ma base de données, je ss pas si j'ai bien expliquer mon pb sinon je vais le repeter
4 Janvier 2007 14:58:06

Tu pourrais aussi faire une combobox en faisant des propositions dans la liste déroulante au fur et à mesures que l'utilisateur tapes des lettres (comme googlesearch).
Est-ce une application windows ou une application web ?
Tu peux aussi mettre un masque de saisie sur la combobox afin d'obliger l'utilisateur à taper un chiffre et un mot.
Ensuite, le split est effectivement le plus simple et le plus rapide pour dépiler le champs, mais il faut être certain d'en contrôler le format.
4 Janvier 2007 15:11:27

Moi à ta place, et si c'est possible pour ton application, je mettrai une combobox avec les tables disponibles et un champ texte voir meme un NumericUpDown (ou truc dans le genre, j'ai plus le nom extact en tête).
Comme ça tu est tranquille, pas de vérification, tu sais ce que tu a et voilà!
4 Janvier 2007 15:48:19

merci bien pour vous!!!
je crois que vous m'avez pas bien compris!!!
mon application windows consiste à verifier par le code et ne pas avec combobox (si c'est le cas il va etre tres simple je sais ) mais le pb reside comment choisir une expression reguliere qui a comme parametre une variable qui est reliée a la base de données
4 Janvier 2007 16:18:13

Je me trompe sûrement, mais je ne vois pas trop l'intérêt d'utiliser une expression régulière pour faire une recherche textuelle dans 2 tables.

La base de donnée est un SqlServer 2005 ?
Si oui, tu peux lancer une requête textuelle dans la base de ton choix. C'est exactement ce que tu veux faire.
Sinon, le plus simple est de faire le select qui va bien avec une jointure sur les 2 tables et avec une clause where avec un like.
ce serait d'ailleurs plus performant d'en faire une procédure stockée.
4 Janvier 2007 16:28:59

Heu... et au fait, je ne crois pas que tu puisses avoir des variables dans une déclaration de Regex.
Les constructeurs sont les suivants :
Regex(String exp)
Regex(String exp, RegexOptions options)
4 Janvier 2007 16:35:38

Une autre possibilité est de ramener un DataSet contenant tes 2 tables (ultra-déconseillé si les tables sont volumineuses) et parcourir avec un foreach les rows dans lesquelles tu recherches ton fragment de mot.
A mon avis, c'est encore mieux de laisser ça au sgbd. Surtout si un index est utilisé pour les colonnes de recherche
5 Janvier 2007 10:06:05

vraiment merci treeees bien pour tes reponses!!
mais vraiment j'ai essayé sans succes de creer une expression régulière
de telle facon quand l'utilisateur rentre par exemple "3 L lait"
"3" et "l" sont facile a representer "[:D igit:]L" et lait va le chercher dans les table s'il existe
j'espere que t'as compris mon besoin
j'ai pas pu creer cette expression régulière qui respecte ca et la requete correspondante
NB:ma base de donnée est un SqlServer 2005
5 Janvier 2007 10:13:01

cette application que je demande est simplement un exemple qui peut vraiment m'aider dans mon travail, il englobe les points que j'ignore : maitriser expressions reguliere , requete sql, et comment les faire
a c 145 L Programmation
5 Janvier 2007 10:13:38

grosso-modo, il faut aller chercher tout ce qui est chaine de caractère d'au moins 2 caractères?
"([a-zA-Z]{2,})"
5 Janvier 2007 10:16:42

lauranet a dit :
vraiment merci treeees bien pour tes reponses!!
mais vraiment j'ai essayé sans succès de creer une expression régulière
de telle façon quand l'utilisateur rentre par exemple "3 L lait"
"3" et "l" sont facile a représenter "[:D igit:]L" et lait va le chercher dans les table s'il existe
j'espère que t'as compris mon besoin
j'ai pas pu créer cette expression régulière qui respecte ca et la requête correspondante
NB:ma base de donnée est un SqlServer 2005

Possibilités :

* Faire une recherche textuelle dans la base. Tu auras des exemples sur le site de msdn2 de microsoft.

* Passer un tableau de mots à la procédure stockée. Dans la procédure stockée, tu construis dynamiquement une requête sql avec des clauses where multiples (WHERE champ1 like $mot1 OR champ1 like $mot2 OR champ like $mot3...)

* Récupérer un dataset dans la couche de données de ton application, construire un tableau d'expression régulières déterminées basée sur chaque mot clé à rechercher (1 expression régulière par mot clé), puis parcourir le dataset on comparant les mots clés.

Perso, je mettrais en place la solution 1.
5 Janvier 2007 10:43:27

j'ai pas compris la premiere solution
et j'ai entré dans ce site et j'ai pas trouvé ou il se trouve les exemples
5 Janvier 2007 11:03:50

lauranet a dit :
j'ai pas compris la premiere solution
et j'ai entré dans ce site et j'ai pas trouvé ou il se trouve les exemples

Il s'agissait de cette fonctionnalité : http://www.microsoft.com/france/technet/produits/sql/2005/info/info.asp?mar=/france/technet/produits/sql/2005/info/20050728_recherche_texte_sql2005.html&xmlpath=/france/technet/produits/sql/2005/eval.xml&rang=1
Toutefois, si tu tiens absolument à utiliser les expressions régulières, tu devrais opter pour l'option n°2.
5 Janvier 2007 11:22:38

oui effectivement je vois que la 2eme qui me convient et j'ai deja pense a cettte solution mais puisque je suis tres debutante concernant la manipulation des requetes et des expressions regulieres j'ai pas arrive a la cfaire correcte donc veuillez m'aider au code!!!!!!!!!!!
et merci infiniment!!!!!!!!!!
5 Janvier 2007 11:39:51

Pour t'aider efficacement, il nous faudrait en savoir plus :
- Dans quels champs rechercher l'information ?
- Ta procédure stockée, tu la veux en SQL ou en c# ?
- Quelle doit être la sortie de la procédure stockée ?
=> Un booléen pour indiquer oui ou non j'ai trouvé les mots ?
=> Les lignes qui matchent la recherche ?
=> Un aggregat quelconque ?
- Plus d'autres questions qui ne me viennent pas pour l'instant, mais qui, j'en suis certain, sont capitales !
5 Janvier 2007 12:07:24

concernant procedure stoké c'est pas important qu'il soit en sql ou c#
et pour aussi tes autres questions vous pouver procedez de n'importe quelle facon!!!!! l'essentiel pour moi est la compilation c'est ca mon vrai but!!!
verification de la chaine entrante qui doit commencer par entiet suivi d'un mot qui doit etre exister au niveau d'une table de ma base de données et apres on voit dans une label expression correcte sinon expression non correcte
5 Janvier 2007 12:12:22

Et en .Net 1.1 ou en 2.0
Si c'est en 2.0, je crois que j'ai peut-être un truc du genre google search qui faisait à peu près ce que tu veux. je vais essayer de remettre la main dessus.
5 Janvier 2007 12:13:38

en .Net 2.0
5 Janvier 2007 13:12:10

et je repete mes sinceres remerciments!!!!!!!!!!!!!!!!!
5 Janvier 2007 16:23:39

Désolé, j'ai été bloqué en réunion avec ma MOA...

Bon, un extrait de code te suffira, je pense :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Text.RegularExpressions;
  9.  
  10. namespace Test_Affinage
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }
  18.  
  19. private void CheckField()
  20. {
  21. // Vérification du format de saisie...
  22. Regex exp = new Regex("^[1-9]{1} [a-zA-Z]{1,}");
  23. if (exp.IsMatch(textBox1.Text))
  24. {
  25. // Séparation des mots clés à rechercher
  26. String[] keys = textBox1.Text.Split(" ".ToCharArray());
  27.  
  28. // Construction de la première requête SQL
  29. String sql = BuildSql(keys);
  30.  
  31. // Exécuter la requête sql
  32. // ...
  33.  
  34. // Tester si nb1>0 ou si nb2>0, alors on a trouvé les mots clés en base
  35. // ...
  36. }
  37. else label1.Text = "Vous devez saisir un chiffre, un espace et un mot clé";
  38. }
  39.  
  40. private String BuildSql(String[] keys)
  41. {
  42. // Variables
  43. StringBuilder sql = new StringBuilder();
  44.  
  45. // Création de l'ossature de la requête
  46. sql.Append("SELECT nb1, nb2 FROM ");
  47.  
  48. // Première table
  49. sql.Append("(SELECT COUNT(*) nb1 FROM Table1 WHERE ");
  50.  
  51. // Boucle sur les mots clés
  52. bool separator = false;
  53. for (int i = 1; i < keys.Length; i++)
  54. {
  55. if (separator) sql.Append("OR ");
  56. sql.Append("champ1 LIKE '%");
  57. sql.Append(keys[i]);
  58. sql.Append("%' OR champ2 LIKE '%");
  59. sql.Append(keys[i]);
  60. sql.Append("%' ");
  61. separator = true;
  62. }
  63. sql.Append(") tb1,");
  64.  
  65. // Seconde table
  66. sql.Append("(SELECT COUNT(*) nb2 FROM Table2 WHERE ");
  67.  
  68. // Boucle sur les mots clés
  69. separator = false;
  70. for (int j = 1; j < keys.Length; j++)
  71. {
  72. if (separator) sql.Append("OR ");
  73. sql.Append("champ1 LIKE '%");
  74. sql.Append(keys[j]);
  75. sql.Append("%' OR champ2 LIKE '%");
  76. sql.Append(keys[j]);
  77. sql.Append("%' ");
  78. separator = true;
  79. }
  80. sql.Append(") tb2;");
  81.  
  82. // Retour
  83. return sql.ToString();
  84. }
  85.  
  86. private void button1_Click(object sender, EventArgs e)
  87. {
  88. CheckField();
  89. }
  90.  
  91. }
  92. }
5 Janvier 2007 20:17:08

d'abord merci tres bien c tre gentil de ta part et pardon j'étais absente .
j'ai copier le code mais il m'envoie un erreur lors la compilation qui est:
Error 1 Type 'compilation.Form1' already defines a member called 'Form1' with the same parameter types
?????
5 Janvier 2007 20:18:31

avec 'compilation' est le nom de mon namespace
5 Janvier 2007 20:55:33

ok sayer ca marche merci bien pour ton aide c'est vraiment extra!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS