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

Macro Discussion :

Suppresion d'un guillemet dans une variable d'une macro


Sujet :

Macro

  1. #1
    Membre régulier

    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Points : 104
    Points
    104
    Par défaut Suppresion d'un guillemet dans une variable d'une macro
    Bonjour, je ne trouve pas de fonction ou bien je n'arrive pas à l'utiliser correctement, me permettant de supprimer les deux guillemets entourant une chaîne de caractère. Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %macro insert;
    	%let colonnes = "id_card, card_lot_number, card_type, card_bar_code";
    	%let attributs = "486, 29, '03', 'abc'";
    	proc sql;
    	connect to oracle (USER='login' PASSWORD='pswrd' path=LBMTST03);
    	select nextval from connection to oracle (select no_id_card.nextval from dual);
    	insert into lbmtst03.card (&colonnes) values (&attributs);
    	disconnect from oracle;
    	quit;
    %mend;
    Ici, je voudrais faire en sorte que mes deux variables colonnes et attributs voient leurs guillemets supprimés quand je les entre dans la commande SQL.

    J'aurais bien tenté ainsi, mais ça ne passe pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	insert into lbmtst03.card (compress(&colonnes,"")) values (compress(&attributs,""));
    	disconnect from oracle;
    Ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %macro insert;
    	%let colonnes = "id_card, card_lot_number, card_type, card_bar_code";
    	%let attributs = "486, 29, '03', 'abc'";
    	%let col_temp=compress(&colonnes,"");
    	%let att_temp=compress(&attributs,"");
    	proc sql;
    	connect to oracle (USER='login' PASSWORD='pswrd' path=LBMTST03);
    	select nextval from connection to oracle (select no_id_card.nextval from dual);
    	insert into lbmtst03.card (&col_temp) values (&att_temp);
    	disconnect from oracle;
    	quit;
    %mend;
    En fait je cherche à rendre générique la macro pour pouvoir changer le nombre de colonnes, et donc d'attributs, à remplir dans mes différentes tables. Donc à la place de définir les variables dans cette macro directement, à terme, je pense faire un appel d'une autre macro pour qu'il crée la variable à intégrer dans la commande sql.

    Dans cet exemple il y a d'autres petites choses à changer, comme la table visée, mais pour le moment je limite les variable aux maximum pour pouvoir trouver comment faire.

    Merci d'avance.

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,

    Je pense qu'il faut utiliser un %bquote(&colonne).

    Tiens nous au courant.

    Cordialement.
    Salah
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre régulier

    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Points : 104
    Points
    104
    Par défaut
    Hmm...

    Je ne dois pas utiliser correctement la commande car avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %let colonnes = "id_card, card_lot_number, card_type, card_bar_code";
    %let attributs = "486, 29, '03', 'abc'";
    %put &colonnes;
    %put &attributs;
    %let tcol = %bquote(&colonnes);
    %let tatt = %bquote(&attributs);
    %put &tcol;
    %put &tatt;
    %put %bquote(&colonnes);
    %put %bquote(&attributs);
    Voici le log que je récupère :

    1 The SAS System 16:08 Thursday, March 27, 2008

    1 ;*';*";*/;quit;run;
    2 OPTIONS PAGENO=MIN;
    3 %LET _CLIENTTASKLABEL=%NRBQUOTE(Code6);
    4 %LET _EGTASKLABEL=%NRBQUOTE(Code6);
    5 %LET _CLIENTPROJECTNAME=%NRBQUOTE(D:\projet\ISIBIO\Isios\Projet.egp);
    6 %LET _SASPROGRAMFILE=;
    7
    8 ODS _ALL_ CLOSE;
    NOTE: Some of your options or statements may not be supported with the Activex or Java series of devices. Graph defaults for these
    drivers may be different from other SAS/GRAPH device drivers. For further information, please contact Technical Support.
    9 OPTIONS DEV=ACTIVEX;
    10 FILENAME EGHTML TEMP;
    NOTE: Writing HTML(EGHTML) Body file: EGHTML
    11 ODS HTML(ID=EGHTML) FILE=EGHTML ENCODING='utf-8' STYLE=statdoc
    11 ! STYLESHEET=(URL="file:///C:/Program%20Files/SAS/Shared%20Files/BIClientStyles/statdoc.css")
    11 ! ATTRIBUTES=("CODEBASE"="http://www2.sas.com/codebase/graph/v91/sasgraph.exe") NOGTITLE NOGFOOTNOTE GPATH=&sasworklocation
    11 ! ;
    12
    13 %gaccessible;
    14 %let colonnes = "id_card, card_lot_number, card_type, card_bar_code";
    15 %let attributs = "486, 29, '03', 'abc'";
    16 %put &colonnes;
    "id_card, card_lot_number, card_type, card_bar_code"
    17 %put &attributs;
    "486, 29, '03', 'abc'"
    18 %let tcol = %bquote(&colonnes);
    19 %let tatt = %bquote(&attributs);
    20 %put &tcol;
    "id_card, card_lot_number, card_type, card_bar_code"
    21 %put &tatt;
    "486, 29, '03', 'abc'"
    22 %put %bquote(&colonnes);
    "id_card, card_lot_number, card_type, card_bar_code"
    23 %put %bquote(&attributs);
    "486, 29, '03', 'abc'"
    24
    25
    26 %LET _CLIENTTASKLABEL=;
    27 %LET _EGTASKLABEL=;
    28 %LET _CLIENTPROJECTNAME=;
    29 %LET _SASPROGRAMFILE=;
    30
    31 ;*';*";*/;quit;run;
    32 ODS _ALL_ CLOSE;
    33
    34
    35 QUIT; RUN;
    36

    Une suggestion ?

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    tu as raison.

    Voici une solution
    %macro toto;
    option mprint;
    proc sql;
    create table toto (id_card int, card_lot_number int, card_type char(10),card_bar_code char(10));
    quit;
    /*data toto;
    format id_card 3. card_lot_number 3. card_type $10. card_bar_code $10.;
    stop;
    run;*/
    %let colonnes = "id_card, card_lot_number, card_type, card_bar_code";
    %let attributs = "486, 29, '03', 'abc'";
    %put %sysfunc(compress(&attributs,%str(%")));
    %put %sysfunc(compress(&colonnes,%str(%")));
    proc sql;
    insert into toto (%sysfunc(compress(&colonnes,%str(%")))) values (%sysfunc(compress(&attributs,%str(%")))
    );
    quit;
    %mend;
    %toto;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  5. #5
    Membre régulier

    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Points : 104
    Points
    104
    Par défaut
    Ah nickel !

    Ca fonctionne parfaitement. Dorénavant, je saurais à quoi sert la fonction %SYSFUNC !

    Merci beaucoup, je vais pouvoir continuer l'élaboration des macros.

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

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Réponses: 0
    Dernier message: 07/10/2011, 11h43
  3. faire passer une variable d'une fct js à une page php
    Par harlock59 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 14h41
  4. Affecter une variable javascript à une variable php
    Par gwendy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 20h58
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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