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

さて、あなたはそれの長さを取得する以外にもしていません。最初の 13 文字を取り除くだけのハックな方法のよう"Audit_######_"見えます。

よりスマートな方法は、2 番目のアンダースコアの後にすべてを取得することです。

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

これを処理するにはいくつかの方法があります。D Stanleyが提案した文字列操作を使用するのも 1 つの方法です。もう 1 つは、ファイル名をアンダースコアで分割し、フラグメントを調べる方法です。

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+1 つ以上の数字に一致します。限定された桁数 (たとえば、6 桁以上 8 桁以下) に一致させたい場合は、パターンのその部分を に置き換え\d{6,8}ます。

于 2013-11-14T19:03:50.393 に答える