我正在尝试从文件夹中删除具有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 []
}
}
答案 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;