IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

expression réguliere en c++


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut expression réguliere en c++
    bonjour j'aimerais modifier les champs d'une table avec une requete sql.

    voila les données a modifier sont les numeros de téléphone.
    ils sont écrits comme sa dans les champs CL_TEL :
    02.96.00.01.02 ou 02 96 00 01 02
    et moi je voudrais qu'il soit comme ceci 0296000102.
    Quel est l'expression réguliere qui me permetrait via une requete sql de tous les modifier (il y en a plus de 4000, c pour sa que je ne souhaite pas le faire a la main)
    la table s'appel CLIENT, le champs a modifier CL_TEL.
    possédant le code permettant de lire tous les champs il me manque juste la requete qui va bien.
    Merci.

  2. #2
    mat.M
    Invité(e)
    Par défaut
    A ma connaissance je ne crois pas que le traitement d'expressions réguliéres existe en C/C++ .
    Il doit y avoir des classes toutes faites pour cela à rechercher sur Internet peut-être sur www.codeproject.com assez complet.
    Sinon il faut faire ça par soi-même.

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Sinon tu te le fais à la main ...

    tu récuperes la chaine par sql
    tu appliques un traitement
    tu enregistres la nouvelle chaine par sql

    (traitement peut etre du style : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    	//char source[20] = "02.96.00.01.02";
    	char source[20] = "02 96 00 01 02";
    	char dest[20];
    	char *c,*d;
    	c = source;
    	d = dest;
     
    	while (*c)
    	{
    		while (*c=='.' || *c==' ')
    			c++;
    		*d=*c;
    		d++;
    		c++;
     
    	}
    	*d='\0';
     
    	// dest contient la chaine modifée

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    merci de ta réponse, mais en fait l'expression régulière serait dans la requete sql (indépendantes du code écrit en visual)
    Le code écrit en c++ me permet de me connecter a la BDD via odbc apres j'écris une requete sql du type :

    "SELECT CL_NOM, CL_TEL, CL_MOB, VI_NOM, VI_CP FROM CLIENT"

    sauf que la se serait quelque chose du type

    "UPDATE CLIENT.CL_TEL ...'expression régulière' "

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ah ... faudrait peut-etre demander plutot dans un forum de base de données, ils sauraient certainement mieux t'orienter qu'ici

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    pour enlever les '.' ou les ' ' il ya plus rapide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CString str="02.96.00.01.02"; 
    str.Remove('.'); // enleve les .
    str.Remove(' '); // enlenve les blancs.
    pour la requete pour faire un update moi je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // pour chaque record  en disposant de clef ici key1 pour exemple.
    str=" UPDATE CLIENT SET CL_TEL='0296000102' WHERE key1 = 'vk1'
    mais bon je suis pas un cador des bases de données.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    le truc c'est que je veux qu'il enleve tous les '.' et ' ' de tous les champs CL_TEL de la table CLIENT en une seule exécution, et qu'il mette aussitot les champs de la table a jour.

  8. #8
    mat.M
    Invité(e)
    Par défaut
    merci de ta réponse, mais en fait l'expression régulière serait dans la requete sql (indépendantes du code écrit en visual)
    SQL c'est vague !!
    C'est comme si je disais à mon garagiste : ma voiture est en panne !
    Merci d'être plus précis.
    Quel base de données est-ce ?? Oracle Access , SQL SERVER ???
    On ne peut pas mettre d'expression régulière dans du SQL ( sauf peut-être cascader cela dans du code pour procédures stockées comme avec PL-SQL pour Oracle ou le langague propre à SQL-SERVER )

    La commande Update c'est UPDATE un point c'est tout.
    Je ne sais pas où est-ce que tu as été cherché ce truc d'expression régulière.
    Cela existe dans d'autres languages comme peut-être Java je crois ,Javascript , Php ,PERL ,mais pas en C++ !
    Mes prédecesseurs ont donné la marche à suivre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    le truc c'est que je veux qu'il enleve tous les '.' et ' ' de tous les champs CL_TEL de la table CLIENT en une seule exécution, et qu'il mette aussitot les champs de la table a jour.
    Il faut créer par soi-même le code qui fasse cela.

    Il faut faire une "moulinette" pour cela : le mieux , encore une fois merci de préciser la BDD , c'est de créer un pointeur d'enregistrements ( recordset ) avec SELECT * FOM CLIENT ou plutôt SELECT CL_TEL FROM CLIENT car SELECT * ça demande énormément de traitement pour une grosse table.
    Il faut alors créer une boucle avec FAIRE.... TANT QUE FIN ENREGISTREMENTS <>NULL , lire la valeur du numéro de tél. , le "bidouiller" pour enlever les caratêres indésirables et mettre à jour le champs avec UPDATE .

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    La bdd utilisé est développé avec foxpro. mon gros probleme c'est pas de comprendre le principe(cf: la moulinette) mais de le coder....

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    boost::regex. Ce n'est pas standard, mais c'est ce qui s'en rapproche le plus.

    Sinon, pour un truc pareil, CString (comme signalé par farscape) et std::string disposent de méthodes pour virer des caractères d'une séquence.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] Expression réguliere
    Par grizzz dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 17/08/2007, 16h14
  2. [RegEx] Expressions régulieres
    Par crazymickey dans le forum Langage
    Réponses: 8
    Dernier message: 23/09/2005, 21h06
  3. expression réguliere
    Par htristra dans le forum C
    Réponses: 11
    Dernier message: 06/09/2005, 22h33
  4. expression réguliere
    Par alambics dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/03/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo