使用sas删除3岁的文件

时间:2016-10-04 13:18:40

标签: sas

我正在尝试从文件夹中删除具有3年历史文件的文件。但是当我运行代码时,它还删除了我试图删除的文件名frmat中不存在的其他文件。文件名就像 SFRE_BIL_SIT_20160812_134317_PAM_FILES1.zip 我附上了代码

    let testStr = "a"
    let matches = self.matchesForRegexInText(regex: "^[a-zA-Z]+$", text: testStr)

    if matches.count > 0 {
        //string contains only a-z or A-Z
    }

func matchesForRegexInText(regex: String, text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex, options: [])
        let nsString = text as NSString
        let results = regex.matches(in: text,
                                            options: [], range: NSMakeRange(0, nsString.length))
        return results.map { nsString.substring(with: $0.range)}
    } catch let error as NSError {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

1 个答案:

答案 0 :(得分:0)

我可以在代码中看到至少一个可能导致意外行为的错误:

month = input(substr(datestring,5,2),best.);
day = input(substr(datestring,5,2),best.);

我认为你打算输入:

day = input(substr(datestring,7,2),best.);
但是,我不会这样做 - 使用日期信息来更快地执行此操作:

date = input(datestring,yymmdd8.);

但是,我认为更大的问题在于这一行:

if intnx('year', today(),-3,'S') > date then do; /*Deletion logic follows*/

如果您有一个不想删除的文件不是同一格式的,那么date可能会丢失一个值,因为它赢了& #39;在您正在查找的地方有一个日期,之前的输入功能将返回缺失值。在SAS中,数字缺失值小于任何非缺失数值,因此除了名称格式为您要删除的小于3年的文件外,此条件将评估为true。

您可以通过调整代码来轻松避免错过值:

if intnx('year', today(),-3,'S') > date and not(missing(date)) then do;