在vb脚本中替换#

时间:2013-11-14 14:41:20

标签: validation vbscript

我在vb脚本中有这一行:

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

Audit_######_现在需要6位数。我遇到的情况是我有7位和8位的文件。 文件名:Audit_1002611_Comnpany_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

谢谢

2 个答案:

答案 0 :(得分:1)

嗯,除了获得它的长度之外,你不是用<{1}}做任何事情。 看起来就像剥夺前13个字符的黑客方法一样。

更智能方式可能是在第二个下划线之后获取所有内容:

"Audit_######_"

答案 1 :(得分: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}替换该模式的那一部分。