2016-06-13 101 views
1

我很难理解这一点。我怎样才能将结果限制为50。比方说,如果在目录中我有1000个文件,我怎么能限制它,以便只有50个文件被循环。cfdirectory循环限制结果

<cfdirectory action="list" directory="#ExpandPath('/downloaded/')#" name="listRoot" filter="*.xml" recurse="false" sort="datelastmodified asc"> 
<cfoutput> 
    <cfloop query="listRoot" from="1" to="50" index="i"> 
      .... 
    </cfloop> 
</cfoutput> 

当我运行上面的代码中,我得到了以下错误消息

属性验证错误标签CFLOOP。

回答

6

如果您查看完整错误信息,它包含答案(重点是我的):

它具有无效的属性组合:from,index,query,to。 可能的组合是

  • 必需属性:'查询'。可选属性:'endrow,startrow'
  • ...
  • 必需属性:'from,index,'。可选属性:'步骤'

该代码试图混合两种不同类型的循环:查询循环和from/to循环。这不是一个有效的组合。您可以使用query回路 a from/to回路,但不能同时使用两者。

话虽如此,因为目标是显示输出,所以实际上不需要cfloop。只要使用cfoutput与 “STARTROW” 和 “maxRows进行” 属性:

<cfoutput query="listRoot" startRow="1" maxRows="50"> 
     #name#<br> 
    </cfoutput> 

正如在其他答复中提到,近期CF的版本还支持for ...in loops

<cfscript> 
    for (row in listRoot) { 
     writeOutput("<br>Debug: name value = "& row.name); 
    } 
</cfscript> 
2

您可以通过访问特定行的查询:

query[columnName][rowIndex]

为了做一个from to loop代替each loop的,去:

<cfoutput> 
    <cfloop from="1" to="50" index="i"> 
     #listRoot["name"][i]#<br> 
    </cfloop> 
</cfoutput>