我正在将ColdFusion应用程序转换为C#(我是CF n00b)。
我有一个脚本执行cfquery然后cfloop通过结果,它似乎试图将当前行与其后一行进行比较。它似乎试图确保它不会尝试读取数组的末尾。
<cfquery name="qTripLegs" datasource="#sdb#">
SELECT ...
</cfquery>
<cfloop query="qTripLegs">
<cfif (customs_stop[currentrow] NEQ "" OR fuel_stop[currentrow] NEQ "") AND recordcount GT currentrow AND departure[currentrow] NEQ arrival[currentrow+1]>
感觉currentntrow是从1开始的(当它首次进入cfloop时,currentntrow的值为1)。我对么?我查看了coldfusion文档,但我没有看到任何相关内容。
答案 0 :(得分:18)
是的,CF中的查询和数组是从1开始的。
CurrentRow和RecordCount变量是查询的属性(在查询循环中,它们是自动作用域的。)
<cfloop query="QueryName">...</cfloop>
将循环遍历整个查询*,从1到QueryName.RecordCount
,QueryName.CurrentRow
索引会自动填充/递增。不使用查询循环之前的值。
*(除非使用cfbreak / etc)
另外要指出的是,通常不需要阻止读取结束(如上所述,查询循环处理它),这只是因为正在使用CurrentRow + 1来避免错误。
答案 1 :(得分:0)
原始问题是查询。 CFloop通过数组没有currentRow属性。有趣的解决方案,如果你想使用循环索引属性来保存数组元素而不是跟踪“currentRow”计数器from="1" to="#arrayLen(myArray)#" index="currentRow"
<cfset currentRow=1>
<cfloop array="#myArray#" index="tRa">
#currentRow# (#tRa#)...
#currentRow++#<!--- will display not incremented, then will increment --->
<cfif ....>#currentRow-1#</cfif><!--- now incremented so have to "-1" --->
</cfloop>
currentRow++
都输出变量的当前值,然后递增它 - 代表循环底部的编码<cfset currentRow=currentRow+1>
。