Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/05/2011, 22h32   #1
Membre à l'essai
 
Homme Jean-François Marchand
Analyste d'exploitation
Inscription : octobre 2008
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Jean-François Marchand
Localisation : Canada

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : octobre 2008
Messages : 30
Points : 24
Points : 24
Par défaut Erreur variable macro dans email

Bonjour,

j'ai un problème dans la résolution d'une variable macro dans l'ATTACH de l'envoie d'un e-mail.... car le contenu de ma variable macro est trop longue je crois....

Si je mets le chemin directement, ça fonctionne...

Code :
1
2
3
4
5
6
7
8
9
 
filename outbox email TO=("ZC502")
subject="Production hebdomadaire des informations de gestion";
 
DATA _null_;
 file outbox
     attach=("P:\VPSA\INFORMAT\Production_SAS_test_Download\Publications_Information_Gestion\Revision\Hebdomadaire\DIG31501\2011_05_26\DIG31501.865-2011_05_26.PDF"
     "P:\VPSA\INFORMAT\Production_SAS_test_Download\Publications_Information_Gestion\Revision\Hebdomadaire\DIG31501\2011_05_26\DIG31501.865.resume2-2011_05_26.PDF");
etc....
Si je mets ma variable macro, il y a erreur :

Code :
1
2
3
4
5
6
7
8
 
filename outbox email TO=("ZC502")
subject="Production hebdomadaire des informations de gestion";
 
DATA _null_;
 file outbox
  attach=("&Instruc_COUR_ATTACH");
etc.....
Voici mon message d'erreur....

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
SYMBOLGEN:  Variable macro INSTRUC_COUR_ATTACH traitée dans
          P:\VPSA\INFORMAT\ENVR_SASPC\DEV\RAPP_NOMIN\HEBDOMADAIRE\DIG95080\2011_05_26\AGI\DI
            G95080.001.AGI-2011_05_26.PDF
 
ERREUR:  Violation de l'accès en lecture En tâche ( DATASTEP )
Exception en (012B1549)
Task Traceback
Address   Frame     (DBGHELP API Version 4.0 rev 5)
012B1549  0C7AF9FC  sashost:Main+0x4A8B9
62D36524  0C7AFA24  sasvmail:hxenative_ui+0x6C
62D34BC2  0C7AFC80  sasvmail:mcn_main+0x3BC2
62D34742  0C7AFD5C  sasvmail:mcn_main+0x3742
62D3279D  0C7AFDC4  sasvmail:mcn_main+0x179D
6798FB23  0C7AFE0C  sasxkern:mcn_main+0x3EB23
672BC0C0  0C7AFE78  sasdsc:mcn_main+0xB0C0
67871838  0C7AFF04  sasxshel:mcn_main+0x30838
67871381  0C7AFF14  sasxshel:mcn_main+0x30381
672B1891  0C7AFF48  sasdsc:mcn_main+0x891
673111E9  0C7AFF88  sasds:mcn_main+0x1E9
01272B02  0C7AFFA0  sashost:Main+0xBE72
01276C20  0C7AFFB4  sashost:Main+0xFF90
7C80B729  0C7AFFEC  kernel32:GetModuleFileNameA+0x1BA
Je crois que le contenu de ma variable macro est coupé en deux car trop long et ça donne l'erreur....

Ça fonctionne si le contenu de ma variable macro est plus courte.

Y-a-t-il une fonction pour empêcher SAS de couper le coutenu de ma variable???

Hoho, je viens de voir en visualisant que j'ai peut-être concaténer numérique et texte..... je ferai le test demain.

Merci beaucoup J-F.
DEMMAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 07h05   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour Jean-François.
Trois remarques comme ça en passant :
- dans mon expérience, les messages type "READ ACCESS VIOLATION" comme les tiens tenaient parfois plus à des bugs de SAS qu'à des soucis de programmation. Cela dit, c'est très curieux qu'ils apparaissent à l'utilisation du macro-langage, puisqu'il s'agit d'un message généré par le compilateur SAS et que la présence d'une macro-variable lui est impossible à repérer
- entre ton programme "en dur" et la version avec macro dans la Log, le chemin du fichier attaché a changé. Tu as testé avec le même fichier qu'en dur ? Est-ce que ça ne viendrait pas du changement de fichier ?
- dans ton exemple en dur, tu as 2 fichiers attachés. Ta macro-variable contiendrait donc, pour faire l'équivalent, 2 chemins physiques. Chacun devrait être encadré de guillemets ; or tu écris donc une seule paire de guillemet autour de l'ensemble des 2 chemins. Il vaudrait mieux mettre les guillemets directement dans la valeur de la macro-variable (à la main ou avec la fonction QUOTE) et
Code :
attach=(&Instruc_COUR_ATTACH)
Enfin, la capacité maxi d'une macro-variable est de 32000 caractères en v8 et 64000 en v9 ; je n'ai pas vraiment l'impression que ton exemple en dur dépasse.

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 31/05/2011, 16h15   #3
Membre à l'essai
 
Homme Jean-François Marchand
Analyste d'exploitation
Inscription : octobre 2008
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Jean-François Marchand
Localisation : Canada

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : octobre 2008
Messages : 30
Points : 24
Points : 24
Par défaut erreur dû au " " de début et fin...

Salut Olivier,

Merci beaucoup pour la solution.

Mon erreur était que je générais le " de début du premier lien et le " fin du dernier lien dans l'appel ATTACH et que je générais mes autres guillmets entre tous mes liens " " dans le contenu de ma variable macro.

En mettant tous les guilmets dans le contenu de ma variable macro, Tout est OK... Merci.

Code :
1
2
 
attach=(&Instruc_COUR_ATTACH)
Voici le contenu de ma variable macro traitée dans une macro pour chaque usager.....

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
DATA   _NULL_;                                                          
SET   WORKSAS.WORKATTACH;                                                         
BY    CODE_USAGER;
 
KEEP   listeposte2       ;                                            
LENGTH listeposte2 $&MAX_ATTACH ;                                                 
RETAIN listeposte2       ;                                                 
 
Var0 = """file://";
Var1 = " """;
Var2 = ";";
VAR3 = "\";
VAR4 = "-";
VAR5 = ".";
VAR6 = """"; 
 
If _n_ =1 then do;
               listeposte2 =  VAR6||COMPRESS(VAR_REP_LOCAL)||VAR3||COMPRESS("&DATE_FICH")||
                              VAR3||COMPRESS(NUMERO_FICHIER)||VAR4||COMPRESS("&DATE_FICH")||VAR5||
                              COMPRESS(EXTENTION)||VAR6;
               CALL SYMPUT("Instruc_COUR_ATTACH"," "); 
               end;  
 
          else do;
               liste_trav2 = COMPRESS(listeposte2)||Var1||COMPRESS(VAR_REP_LOCAL)||VAR3||COMPRESS("&DATE_FICH")||
                              VAR3||COMPRESS(NUMERO_FICHIER)||VAR4||COMPRESS("&DATE_FICH")||VAR5||
                              COMPRESS(EXTENTION)||VAR6;
               listeposte2 = COMPBL(liste_trav2);
	           end;
 
if _N_ = &NLIGNE_ATTACH then CALL SYMPUT("Instruc_COUR_ATTACH",listeposte2);  
RUN;
Noter que le mail sera envoyé à l'usager par variable macro.... le 'ZC502' est là pour les tests....

Merci encore, J-F.
DEMMAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h30.


 
 
 
 
Partenaires

Hébergement Web