Getting Ready For The ColdFusion Post-Christmas Raffle

Posted December 27, 2006 at 4:57 PM

Tags: ColdFusion

This Christmas, I tried to give away some little "Kinky Solutions" gifts to people. Some people accepted, others passed. As a result, I have a few surplus gifts lying around that I would like to raffle off. In preparation for this post-Christmas gift raffle, I wrote a small little raffling system in ColdFusion that will help me select the names of anyone who is interested.

This small ColdFusion raffling algorithm takes a text file (.txt) of entry names and basically selects random records from it. However, I know that randomization on a computer is merely generated and not truly random. To help make the raffle more fair, for each entry selection I both shuffle the entries and then select a random index. Ok ok, maybe this has more to with entertaining myself than it does with making it fair... but come on, how often do I get to use the Java Collections object? Sometimes you just have to invent reasons to "use" when nothing logically presents itself :D

 Launch code in new window » Download code as text file »

  • <!--- 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"
  • />

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Permalink  |  Other Searches  |  Print Page



Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

mikle
Aug 3, 2009 at 10:34 AM // reply »
1 Comments

his small ColdFusion raffling algorithm takes a text file


Post Comment  |  Ask Ben

Recent Blog Comments
Nov 7, 2009 at 5:53 PM
Ask Ben: Javascript String Replace Method
You can find here an advanced function that prepared with javascript replace function. This can make the first letters of words, sentences, lines and whatever you define automatically: http://www.m ... read »
Andrew Neely
Nov 7, 2009 at 4:56 PM
A Moment That Touched Me - The Fountainhead
Ben, Glad you enjoyed the podcast. Yeah, the Tank Riot guys can get really chatty during the episodes, but that's part of the charm of it for me. They've covered everything from Nichola Tesla to Cha ... read »
Nov 7, 2009 at 4:43 PM
Building A Fixed-Position Bottom Menu Bar (ala FaceBook)
Is it possible to make some more MenĂ¼`s ? ... read »
Jill
Nov 7, 2009 at 11:40 AM
How To Unformat Your Code (Like A Pro)
Derek, I think you might be right - sweet! Thanks for the link :) ... read »
Nov 7, 2009 at 11:25 AM
How To Unformat Your Code (Like A Pro)
I think it would be way easier to just use this http://www.logichammer.com/html-formatter/ He just released v3 and it rocks. ... read »
Jill
Nov 7, 2009 at 7:58 AM
How To Unformat Your Code (Like A Pro)
LMAO - this was pretty funny! I have to admit - I also love to reformat code so I can read it. My boss used to tell me to leave my OCD at home. Now I don't feel so bad after reading everyone else' ... read »
Nov 6, 2009 at 10:10 PM
How To Unformat Your Code (Like A Pro)
The timing of this post is just uncanny. I spent the last 15-20 minutes manually un-formatting my "Ben Nadel" style code within a CFC of mine. I was really digging the readability a few weeks ago, bu ... read »
Roe
Nov 6, 2009 at 5:11 PM
Passing Arrays By Reference In ColdFusion - SWEEET!
ArraySort also reorders the results of these java obj's ... read »