我尝试构建一个小的系统,该系统将验证附件是否存在(来自4个来源),如果存在,请通过电子邮件发送此附件。 如果存在一个,则发送它。 我找到了有趣的代码,但是我几乎没有验证四个文件并用路径的路径粘贴变量。
%LET ATTACH1=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_1_&calosc..csv);
%LET ATTACH2=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_2_&calosc..csv);
%LET ATTACH3=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_3_&calosc..csv);
%LET ATTACH4=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_4_&calosc..csv);
%MACRO FINDMYFILE;
%LET ZALACZNIKI = ;
%IF %SYSFUNC(FILEEXIST(&ATTACH1)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH1 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH2)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH2 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH3)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH3 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH4 || ' ';
%PUT &ZALACZNIKI;
%IF %SYSFUNC(FILEEXIST(&ATTACH1)) OR %SYSFUNC(FILEEXIST(&ATTACH2)) OR %SYSFUNC(FILEEXIST(&ATTACH3)) OR %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN
%DO;
FILENAME OUTBOX EMAIL
FROM = ("XX SYSTEM REPORT <noreply@systemaccount>")
TO = ("xzy.yzx@email.com")
CC = ("xzy.yzx@email.com")
REPLYTO = ("xzy.yzx@email.com")
SUBJECT = (" testowy ")
ATTACH = ("&ZALACZNIKI.");
DATA _NULL_;
FILE OUTBOX;
PUT "Hello,";
PUT ;
PUT %SYSFUNC(COMPBL(
"This is an example email."));
PUT ;
PUT %SYSFUNC(COMPBL(
"By using COMPBL we remove extra blanks from our text."));
PUT %SYSFUNC(COMPBL(
"There is no separation with this email line."));
RUN;
FILENAME OUTBOX CLEAR;
%END;
%ELSE %PUT NOTE: FILE DOES NOT EXIST AND NO EMAIL WILL BE SENT.;
%MEND FINDMYFILE;
%FINDMYFILE;
感谢帮助:)
答案 0 :(得分:1)
您在这里遗漏了一些东西:
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH4 || ' ';
如果您要这样做,则需要使用%LET来重新分配宏变量,并且不需要串联运算符,但是您可能需要在文件名两边加上双引号:
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN %LET ZALACZNIKI = &ZALACZNIKI. "&ATTACH4.";
当您使用宏变量时,可能不需要引号,否则您将得到:
“” file1“” file2“” file3“”
所以只要这样做:
ATTACH = (&ZALACZNIKI.);
使用此代码进行实验,以了解其工作原理:
%let file1 = C:\temp;
%let file2 = C:\temp2;
%let z = ;
%let z = &z. "&file1.";
%let z = &z. "&file2.";
%put &z;