coldfusioncfloopcfdirectory

cfdirectory loop limit the results


I' am finding it difficult to understand this. How can I limit the results to 50 only. Let say if in the directory I have 1000 files, how can I limit it so that only 50 files are looped over.

<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>

When I run the above code I get the following error message

Attribute validation error for tag CFLOOP.


Solution

  • If you review the complete error message, it contains the answer (emphasis mine):

    It has an invalid attribute combination: from,index,query,to. Possible combinations are:

    • Required attributes: 'query'. Optional attributes: 'endrow,startrow'.
    • ...
    • Required attributes: 'from,index,to'. Optional attributes: 'step'.

    The code is attempting to mix two different types of loops: query loop and from/to loop. That is not a valid combination. You can either use a query loop OR a from/to loop, but not both.

    Having said that, since the goal is to display the output, there is really no need for the cfloop. Just use cfoutput with the "startRow" and "maxRows" attributes:

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

    As mentioned in the other answer, recent versions of CF also support for ...in loops:

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