2013-11-14 84 views
0

替換#我此行的VB腳本:在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 

謝謝

+0

是「Audit _ ######」可以提供給變量的東西嗎?那麼只需用傳入的字符串替換「Audit _ ######」? –

+0

Jimmy我編輯了我的帖子 – fazlook1

回答

1

嘛,你不任何與"Audit_######_"比得到它的長度等。它看起來就像一個黑客的方式來剝離前13個字符。

一個聰明方式可能是第二個下劃線後得到的一切:

fileCheck = mid(objLookFile.name, instr(instr(objLookFile.name, "_") + 1 , "_")+1) 
+0

我得到了這個錯誤,但:無效的過程調用或參數:'中' – fazlook1

+0

我已編輯我的帖子,我需要filecheck = lookfor,以便他們匹配! – fazlook1

+0

修正:)使用fileCheck = mid(objLookFile.name,instr(2,objLookFile.name,「A」)),因爲2始終是A,並且始終有一個Abefore :) – fazlook1

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}替換該模式的那部分。