2016-05-25 6 views
1

ループする必要のあるファイルのフォルダがあります。各ファイルはファイル名に基づいて別々に処理されます。 2番目の "_"の後のファイル名の部分は、どのプロセスに従うかの鍵です。問題は、名前が似ていると私はそれらを区別するための方法を見つけることができませんです。彼らは常にProcess1として登場します。ファイルやコードのファイル名に基づいてファイルを区別する

典型的なフォルダに私が試してみました:

NV_DB62_mainx_.dxf 
NV_DB62_mainxsplashroad.dxf 
NV_DB62_mainxplashroadONLY.dxf 
NV_DB62_mainsplash.dxf 
NV_DB63_mainx_dxf 
NV_DB63_mainxsplashroad.dxf 
NV_DB63_mainxplashroadONLY.dxf 
NV_DB63_mainsplash.dxf 
Set App = CreateObject("Illustrator.Application") 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set SourceFolder = FSO.GetFolder("S:\NV\Section_13\Road DXFs") 

Dim FileRef 
For Each FileRef In SourceFolder.Files 
    If Instr(FileRef,"mainx") > 0 then 
     Call Process1(FileRef) 
    ElseIf Instr(FileRef,"mainxsplashroad") > 0 then 
     Call Process2(FileRef) 
    ElseIf Instr(FileRef,"mainxsplashroadONLY") > 0 then 
     Call Process3(FileRef) 
    ElseIf Instr(FileRef,"mainsplash") > 0 then 
     Call Process4(FileRef) 
    Else 
     Msgbox "File is not being found or some issue with script." 
    End If 
Next 
+2

テストの順序を変更します。最長最長、最後は最短です。 –

+2

デバッガはあなたのコードがなぜ機能していないのかを表示します。そして少しの常識があなたにそれを伝えます。 'mainx'を最初にチェックしていて、すべての単一ファイル名に入っているなら、明らかにそのテストに合格します。最も短い名前が最初にテストされるように順序を変更し、次に長い順に、次に3番目に長い順に変更して、最短の名前が最終テストになるまで続けます。 –

+0

また、もしLCase(mid(fileref.name、8)= LCase( "mainx_dxf") ' ' –

答えて

0

を麺がコメントで指摘したように、これはアルゴリズムの問​​題です。

エントリは、ほとんどのものから最小限のものまで検索する必要があります。つまり、各If/ElseIfテストは、その下の条件と一致してはいけません(現時点では、"mainx"最初のテストはそのすぐ下の2つに一致します)。

関連する問題