2012-02-21 22 views
0

是否可以編寫執行以下操作的ColdFusion代碼?用於讀取和過濾.cfm文件的ColdFusion代碼

  1. 閱讀.CFM文件
  2. 濾波器.CFM文件有「.CFM」附加到它的任何一句話。
  3. 將步驟2中找到的文件名列表與目錄中的文件進行比較,以確定目錄中是否存在任何不在.cfm文件中的文件。

在第2步中,我試圖在href中查找.cfm文件名。

感謝

回答

3

我測試的目錄是建立一個reader.cfm和list.cfm。它能夠在示例列表文件中找到list.cfm文件,並將reader.cfm文件記錄爲不存在。

Theres可能是一種更好的方式從文件中獲取cfm文件名列表。在正則表達式中我不是大師,但我確實測試了它的工作情況。如果你的鏈接有特殊的字符如_或 - ,它可能不會工作。這應該給你一些開始雖然。

<cffile action="read" 
    file="#expandpath('list.cfm')#" 
    variable="fileList"> 

    <cfset fileResult = rematchNoCase('([a-z]|[A-Z]|[0-9])+\.cfm', fileList)> 

    <cfdirectory 
     directory="#expandPath('.')#" 
     action="list" 
     filter="*.cfm" 
     listInfo="name" 
     recurse = "no" 
     type="file" 
     name="dirList"> 

    <cfset notInFile = ArrayNew(1)> 

    <cfoutput> 
     <cfloop query="dirList"> 
      <cfloop from="1" to="#arrayLen(fileResult)#" index="i"> 
       <cfif dirList.name eq fileResult[i]> 
        found one! #dirList.name#<br> 
        <cfbreak> 
       </cfif> 
       <cfif i eq #arrayLen(fileResult)#> 
        Item not found! #dirList.name#<br> 
        <cfset _r = ArrayAppend(notInFile, dirList.name)> 
       </cfif> 
      </cfloop> 
     </cfloop> 
    </cfoutput> 

    <cfdump var="#notInFile#"> 

list.cfm文件的內容我用。

<a href="someRealLink.cfm">click me to fun</a> 
something 
other thing 
a coldfusion.cfm thing 
stuff 
things 
yar.cfm 
blah 
Something.cfm 
0912.cfm 
some123.cfm 
cfm 
list.cfm 

通過我們的目錄內容的第一個循環週期。第二個循環循環遍歷我們正在查看的cfm文件中的數組數組條目。第一個if塊查看當前數組位置內容並將其與外部循環名稱值進行比較。第二個if查看當前數組位置值和最大數組位置值。我們知道如果我們到達當前位置==最大位置可能 - 在內部循環(文件數組)中找不到外部循環元素(目錄列表)。這是第一個if區塊中的<cfbreak>。當我們找到有效匹配時,<cfbreak>將跳出第二個內部循環。這可以防止第二個if塊在vaild查找中執行。

希望這會有所幫助。如果您覺得已回答,請不要忘記接受答案。XD

+0

謝謝。這非常有幫助。你能解釋第二個做什麼?爲什麼我們必須檢查「i」是否等於fileResult的元素?如何「我」不等於fileResult?雖然,這個標籤是必需的。 – MahlerAdmirer 2012-02-29 15:53:40

+0

我在上面添加了一個解釋。我希望這不是太混亂,我不擅長解釋代碼:P – ShortRound1911 2012-03-01 15:32:44