SAS: макрос для отправки электронной почты, если он существует

Я пытаюсь создать небольшую систему, которая будет проверять наличие вложений (из 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 = ("[email protected]")
         CC = ("[email protected]")
         REPLYTO = ("[email protected]")
         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;

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

Можете ли вы поделиться, что здесь не работает? Есть коды ошибок или предупреждения?

rocksteady 19.02.2019 19:42

Если вы уже используете шаг данных, почему бы просто не использовать шаг данных для тестирования? Вы можете использовать директивы электронной почты для прикрепления существующих файлов.

Tom 20.02.2019 05:10
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python - это удобный способ автоматизировать процесс отправки электронных писем. Это может быть полезно для...
0
2
275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;

Другие вопросы по теме