<!--- Read in the entries data file. ---> <cffile action="READ" file="#ExpandPath( './entries.txt' )#" variable="lstEntries" /> <!--- Convert the entries to an array. This is expecting a single entry per line of the text file. ---> <cfset arrEntries = ListToArray( lstEntries, "#Chr( 13 )##Chr( 10 )#" ) /> <!--- Get the number of random entries to pick for raffle. This is number of lucky winners :) ---> <cfset intPickCount = 3 /> <!--- Create an array for selecting raffle entries (the winning picks). ---> <cfset arrPicks = ArrayNew( 1 ) /> <!--- Create a collection class. We are going to use the static method Shuffle() to help randomize the winning pick selection. ---> <cfset objCollection = CreateObject( "java", "java.util.Collections" ) /> <!--- Loop over the entries to select. We are going to only loop enough times to pick the number of selected entries. Of coures, if our entry list is smaller than our max pick count, then we will only loop enough times to select every one on the list (everyone wins). ---> <cfloop index="intI" from="1" to="#Min( intPickCount, ArrayLen( arrEntries ) )#" step="1"> <!--- Shuffle the entries array. Since the arrays are passed by reference into the Shuffle() method (or perhaps more appropriately, passed BACK by reference), we do not need to store the resultant array back into itself. ---> <cfset objCollection.Shuffle( arrEntries ) /> <!--- Even though the entries array has been shuffled, let's also select a random index from within the entries to help randomize. ---> <cfset intEntry = RandRange( 1, ArrayLen( arrEntries ) ) /> <!--- Add that index to the picks. ---> <cfset ArrayAppend( arrPicks, arrEntries[ intEntry ] ) /> <!--- Delete selected pick so that it cannot be selected again in a future loop iteration. ---> <cfset ArrayDeleteAt( arrEntries, intEntry ) /> </cfloop> <!--- Write the entries to file. In order to convert the array back to a text file, we are going to convert it to a list that uses line breaks and carriage returns as its item delimiters. ---> <cffile action="WRITE" file="#ExpandPath( './winners.txt' )#" output="#ArrayToList( arrPicks, (Chr( 13 ) & Chr ( 10 )) )#" addnewline="false" fixnewline="true" />