首页 > 解决方案 > 使用正则表达式解析 SCAPROC 日志文件

问题描述

我正在尝试从使用 SCAPROC 创建的日志中解析所有 libnames 和库路径。我已经使用以下代码成功解析了数据集名称:

data output_files;  
infile scalog truncover;  
input @1 logline $256.;  
keep libname filename;  
retain prx_output_file;  
if _n_=1 then do;  
prx_output_file = prxparse("!\bJOBSPLIT: DATASET OUTPUT \b.*\b (\b.*\b) \*/!");  
end;  
if prxmatch(prx_output_file, logline) > 0 then do;  
filename_full=prxposn(prx_output_file,1,logline);  
libname=scan(filename_full,1);  
filename=scan(filename_full,2);  
output output_files;  
end;  
run;  

但是,我没有收到以下代码的正则表达式匹配:

data  output_lib;
    infile scalog truncover;
    input @1 logline $256.;
    keep filepath lib_name;
    retain  prx_output_lib;
    if _n_=1 then do;
        prx_output_lib = prxparse("!\bJOBSPLIT: LIBNAME (\S+) ""([^""]+)"" \S+ \*\/!");
    end;
    if prxmatch(prx_output_lib, logline) > 0 then do;
        lib_name=prxposn(prx_output_lib, 1 , logline);
        filepath=prxposn(prx_output_lib, 2 , logline);
        output output_lib;
    end;
run;

注意:数据集 WORK.OUTPUT_LIB 有 0 个观察值和 2 个变量。

我已经在基于浏览器的编辑器中成功测试了正则表达式(粗体),该编辑器返回捕获组 1 中的 libname 和捕获组 2 中的路径名。我想解析的 SCAPROC 日志行示例如下:

/* JOBSPLIT: LIBNAME LMCOMSYS "/team/Common/System/v1.00.3" access=readonly */

我正在使用 SAS EG 版本 7.13 HF5 (7.100.3.5486)(32 位)

谁能指出我在 SAS 中哪里出错了?

谢谢,

约旦

标签: regexsas

解决方案


我已经设法使用以下正则表达式找到解决方案:

    prx_output_lib = prxparse("!\bJOBSPLIT: LIBNAME (\S+) ""([^""]+)"" \S+!");

推荐阅读