SAS: макрос отправлять электронную почту, если существует - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь создать небольшую систему, которая проверит, что вложение существует (из 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;

Спасибо за помощь:)

1 Ответ

0 голосов
/ 20 февраля 2019

Здесь вам не хватает нескольких вещей:

%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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...