2016-05-12 11 views
1

Ich habe einen Ordner, den ich durchlaufen werde, um Dateien basierend auf ihren Dateinamen unterschiedlich zu verarbeiten. Tue Gutes mit meinem Skript (das erste!), Bis ich merke, dass es Dateinamen geben wird, die auch Nummern haben, die Priorität darstellen. Zum Beispiel im Ordner kann es sein:VBscript - Datei basierend auf Priorität auswählen

'NV_CX67_mainx.dxf' 
'NV_CX67_mainx1.dxf' 
'NV_CX67_mainx2.dxf ' 
'NV_CX67_mainxroad.dxf' 
'NV_CX67_motx.dxf' 
'NV_CX67_resxroad.dxf' 

Die mainx, mainx1 und mainx2 sind der gleiche Dateityp aber mainx2 hat Priorität und soll die einzigen verarbeitet werden. Derzeit meine Aussage ist:

If Instr(1,FileRef, "mainx",1) then 

Wie könnte ich einen zweiten Filter hinzufügen nur die Datei mit der höchsten Nummer zu verarbeiten, bevor sie auf die nächste Datei zu verschieben?

Antwort

1

Sie werden durch den folgenden Prozess ausgeführt haben

  1. Sortieren Sie Ihre Eingabedateien
  2. Schleife durch jede Datei einzeln
  3. die aktuelle Datei mit dem vorherigen Vergleichen Sie bei minus sah die Zahlen, um zu sehen, ob es größer ist.
  4. verarbeiten nur ein Element, das Sie alle ähnlichen Artikel gescannt haben, dies zu gewährleisten, die größte Zahl hat

ich unten ein Beispiel schrieb auf. Beachten Sie, dass nur NV_CX67_mainx4.dxf und NV_CX67_mainxroad.dxf verarbeitet werden:

Option Explicit 

Dim i, sBaseFileName, sPrevFileName, prevBaseFile 
sPrevFileName = "~" 
prevBaseFile = "~" 
Dim arr(5) 
'Initialize test array. This will need to be sorted for this code to work properly 
arr(0) = "NV_CX67_mainx.dxf" 
arr(1) = "NV_CX67_mainx4.dxf" 
arr(2) = "NV_CX67_mainx2.dxf" 
arr(3) = "NV_CX67_mainxroad.dxf" 
arr(4) = "NV_CX67_motx.dxf" 
arr(5) = "NV_CX67_resxroad.dxf" 

'Loop through the array 
For i = LBound(arr) to UBound(arr) 
    If Instr(1, arr(i), "mainx",1) Then 'Check prev qualifier 
     sBaseFileName = getsBaseFileName(arr(i)) 

     'First Case  
     If prevBaseFile = "~" Then 
      prevBaseFile = sBaseFileName 
      sPrevFileName = arr(i) 
     'Tie - Figure out which one to keep based on number at end of file name 
     ElseIf prevBaseFile = sBaseFileName Then 
      sPrevFileName = GetMaxFile(sPrevFileName, arr(i)) 
      prevBaseFile = getsBaseFileName(sPrevFileName) 

     'New Case - Process prev case 
     Else 
      'Process File 
      MsgBox ("Processing " + sPrevFileName) 
      'Capture new current file for future processing 
      sPrevFileName = arr(i) 
      prevBaseFile = getsBaseFileName(sPrevFileName)   
     End If 
    End If 
Next 
'If last file was valid process it 
If sPrevFileName <> "~" Then 
    MsgBox ("Processing " + sPrevFileName) 
End If 

'Return the larger of the two files based on numbers at end. 
'Note "file9.txt" > "file10.txt" in this code 
Function GetMaxFile(sFile1, sFile2) 
    GetMaxFile = sFile1 
    If sFile2 > sFile1 Then 
     GetMaxFile = sFile2 
    End If 
End Function 

'Return the file without extension and trailing numbers 
'getsBaseFileName("hello123.txt") returns "hello" 
Function getsBaseFileName(sFile) 
    Dim sFileRev 
    Dim iPos 

    getsBaseFileName = sFile 
    sFileRev = StrReverse(sFile) 

    'Get rid of the extension 
    iPos = Instr(1, sFileRev, ".",1) 
    If iPos < 1 Then 
     Exit Function 
    End If 
    sFileRev = Right(sFileRev, Len(sFileRev)-iPos) 

    'Get rid of trailing numbers 
    Do 
     If InStr(1, "1234567890", Left(sFileRev, 1), 1) Then 
      sFileRev = Right(sFileRev, Len(sFileRev)-1) 
     Else 
      Exit Do 
     End If 
    Loop While(Len(sFileRev) > 0) 

    getsBaseFileName = StrReverse(sFileRev) 
End Function 
Verwandte Themen