You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改SAS文件校验宏以支持多文件批量检测

批量文件校验SAS宏改造实现

以下是改造后的两个SAS宏,支持多文件批量检测,任一文件不满足校验条件时,错误信息会追加写入errorlog.csv:

1. 批量文件存在性校验宏 check_file_exists

该宏接收空格分隔的文件路径列表,逐个检查文件是否存在于服务器,不存在则记录错误日志:

%macro check_file_exists(file_list=, log_file=errorlog.csv);
    /* 首次运行时创建错误日志表头 */
    %if %sysfunc(fileexist(&log_file)) = 0 %then %do;
        data _null_;
            file "&log_file" dlm=',' dsd;
            put '"检查类型","文件名","错误信息","检查时间"' ;
        run;
    %end;

    /* 循环处理每个文件 */
    %let i=1;
    %let file=%scan(&file_list, &i, %str( ));
    %do %while(&file ne );
        %if %sysfunc(fileexist(&file)) = 0 %then %do;
            data _null_;
                file "&log_file" dlm=',' dsd mod; /* 追加模式写入日志 */
                check_type = "文件存在性校验";
                filename = "&file";
                error_msg = "文件不存在于服务器";
                check_time = datetime();
                put check_type :$quote. filename :$quote. error_msg :$quote. check_time datetime20. :$quote.;
            run;
        %end;
        %let i=%eval(&i+1);
        %let file=%scan(&file_list, &i, %str( ));
    %end;
%mend check_file_exists;

2. 批量文件扩展名校验宏 get_FileExtension

该宏校验文件扩展名是否属于允许列表(默认支持TXT、TTX、SAS7BDAT、CSV),不匹配则记录错误日志:

%macro get_FileExtension(file_list=, allowed_ext=TXT TTX SAS7BDAT CSV, log_file=errorlog.csv);
    /* 首次运行时创建错误日志表头(若不存在) */
    %if %sysfunc(fileexist(&log_file)) = 0 %then %do;
        data _null_;
            file "&log_file" dlm=',' dsd;
            put '"检查类型","文件名","错误信息","检查时间"' ;
        run;
    %end;

    /* 循环处理每个文件 */
    %let i=1;
    %let file=%scan(&file_list, &i, %str( ));
    %do %while(&file ne );
        /* 提取并转为大写的文件扩展名 */
        %let ext=%upcase(%scan(&file, -1, .));
        
        /* 校验扩展名是否在允许列表内 */
        %let is_valid=0;
        %let j=1;
        %let allowed=%scan(&allowed_ext, &j, %str( ));
        %do %while(&allowed ne );
            %if &ext = &allowed %then %do;
                %let is_valid=1;
                %let j=%eval(&j+1000); /* 匹配到后跳出循环 */
            %end;
            %let j=%eval(&j+1);
            %let allowed=%scan(&allowed_ext, &j, %str( ));
        %end;

        /* 若扩展名无效,写入错误日志 */
        %if &is_valid = 0 %then %do;
            data _null_;
                file "&log_file" dlm=',' dsd mod;
                check_type = "文件扩展名校验";
                filename = "&file";
                error_msg = "无效扩展名:&ext,允许的扩展名列表:&allowed_ext";
                check_time = datetime();
                put check_type :$quote. filename :$quote. error_msg :$quote. check_time datetime20. :$quote.;
            run;
        %end;
        %let i=%eval(&i+1);
        %let file=%scan(&file_list, &i, %str( ));
    %end;
%mend get_FileExtension;

调用示例

定义需要校验的文件列表,依次调用两个宏完成批量检测:

/* 待校验的文件路径列表(空格分隔) */
%let target_files = /server/path/file1.txt /server/path/file2.sas7bdat /server/path/file3.xlsx /server/path/missing_file.csv;

/* 执行批量存在性校验 */
%check_file_exists(file_list=&target_files);

/* 执行批量扩展名校验 */
%get_FileExtension(file_list=&target_files);

关键特性

  • 支持通过file_list参数传入任意数量的文件路径
  • 错误日志采用追加模式写入,保留历史校验记录
  • 自动处理日志文件的初始化(首次运行创建表头)
  • 扩展名校验忽略大小写,避免因大小写差异导致的误判
  • 每条错误记录包含检查类型、文件名、错误详情和校验时间

内容的提问来源于stack exchange,提问作者Tirumuru Ketha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:13:12