0

我在 vb 脚本中有这一行:

fileCheck = Right(objLookFile.name, len(objLookFile.name) - len("Audit_######_"))

现在Audit_######_需要6位数。我遇到了一种情况,我有 7 位数字和 8 个文件的前文件:Audit_1002611_Company_MTH_11_2013.00001.txt

如何更改######以接受任意位数?

        dim lookFor
    lookFor = fiRef(i_fi) & "_" & AIOType(i_type) & "_" & Right("00" &    (month(processDate + 1)), 2) & "_" & Year(processDate + 1) & ".00001.txt"
    dim minLen
    minLen = len(lookFor)
    dim objLookFolder, objLookFile
    set objLookFolder = objFSO.GetFolder(AIODVDDir)
    For each objLookFile in objLookFolder.files
        if Len(objLookFile.name) >= minLen then
            dim fileCheck
            fileCheck = Right(objLookFile.name, len(objLookFile.name) - len("Audit_######_"))
            if (Left(objLookFile.name, len("Audit_")) = "Audit_") AND (fileCheck = LookFor) then
                'found the audit file

谢谢

4

2 回答 2

1

好吧,除了得到它的长度之外,你没有任何事情。"Audit_######_"去掉前 13 个字符看起来像是一种 hack-y 方式。

聪明的方法可能是在第二个下划线之后获取所有内容:

fileCheck = mid(objLookFile.name, instr( instr(objLookFile.name, "_") + 1 , "_")+1)
于 2013-11-14T14:54:41.983 回答
1

有几种方法可以处理这个问题。使用D Stanley建议的字符串操作是一种方法。另一种是在下划线处拆分文件名并检查片段:

arr = Split(objLookFile.Name, "_", 3)
If UBound(arr) = 3 Then
  If arr(0) = "Audit" And IsNumeric(arr(1)) And arr(2) = lookFor Then
    ...
  End If
End If

不过,使用正则表达式可能是最好的方法:

Set re = New RegExp
re.Pattern = "Audit_\d+_" & fiRef(i_fi) & "_" & AIOType(i_type) _
  & "_" & Right("00" & (month(processDate + 1)), 2) _
  & "_" & Year(processDate + 1) & "\.00001\.txt"

For Each objLookFile In objFSO.GetFolder(AIODVDDir).Files
  If re.Test(objLookFile.Name) Then
    ...
  End If
Next

\d+将匹配一个或多个数字。如果您想匹配有限数量的数字(例如,至少 6 位和最多 8 位数字),请将模式的那部分替换为\d{6,8}.

于 2013-11-14T19:03:50.393 回答