Ok, this is something I've done a thousand times before, but last night when I tried to get it working, it took me a few hours to get it right. I'm sure the first comment on this entry will be a comment showing how much of a bonehead I was, but darnit, I had to get this working or give up programming forever. So what's the problem? Given a set of records, I want to number them from 1 to 5 so that after 5 I go back to 1 again. Or, given 12 records, I want to see: 1,2,3,4,5,1,2,3,4,5,1,2. Simple, right?
So, I began with a simple script that I could use for testing:
<cfloop index="x" from="1" to="#records#"> <cfoutput>
Record: #x#<br/>
<br/>
</cfoutput>
</cfloop>
<cfset records = 12>
<cfset toCount = 5>
Records simply represent how many iterations I'll be simulating and "toCount" represents the number I'll be counting "up" to and repeating. I then thought about the problem and came up with a formula I wrote out like this:
Take your current number, and subtract from that the whole number of sets (sets being what you are counting up).
So given 12, for example, I have 2 whole sets of 5, for a value of 10. 12-10 is 2. So here is my first take at this:
<cfloop index="x" from="1" to="#records#"> <cfset answer = x - (toCount * (x \ toCount))>
<cfoutput>
Record: #x#<br/>
Answer: <b>#answer#</b><br/>
<br/>
</cfoutput>
</cfloop>
<cfset records = 12>
<cfset toCount = 5>
And the result:
What the hey? Every time I hit a multiple of 5 I end up with 0. Ok, that makes sense I guess. So what can I do? Just reduce my current row by one. Yeah, that's it:
<cfloop index="x" from="1" to="#records#"> <cfset answer = x - (toCount * ((x-1) \ toCount))>
<cfoutput>
Record: #x#<br/>
Answer: <b>#answer#</b><br/>
<br/>
</cfoutput>
</cfloop>
<cfset records = 12>
<cfset toCount = 5>
And the result...
So - please - someone tell me there is a much simpler way of doing this?