Getting Ready For The ColdFusion Post-Christmas Raffle

Posted December 27, 2006 at 4:57 PM by Ben Nadel

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

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


Reader Comments

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

his small ColdFusion raffling algorithm takes a text file


Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
InVision App - Prototyping Made Beautiful With Prototyping Tools Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
Feb 10, 2012 at 7:21 PM
jQuery AJAX Strips Script Tags And Inserts Them After Parent-Most Elements
Update! Instead of $(eval(options.insertAfter)).after(data['insertData']); I now use: var ajaxNode = document.createElement('span'); var parent = $(eval(options.insertAfter))[0].parentNode; ... read »
Feb 10, 2012 at 6:18 PM
jQuery AJAX Strips Script Tags And Inserts Them After Parent-Most Elements
encountered this same, what I consider, jQuery bug last week. I'm building a site in which I load some content via AJAX. This content contains Linkedin share button placeholders which Linkedin API ne ... read »
Feb 10, 2012 at 11:30 AM
Cross-Origin Resource Sharing (CORS) AJAX Requests Between jQuery And Node.js
After you understand the concepts here, this is an awesome cheatsheet for enabling CORS in just about anything http://enable-cors.org/ ... read »
JM
Feb 10, 2012 at 9:10 AM
My Safari Browser SQLite Database Hello World Example
@Amy, Here is a very good tutorial on how to use JOIN: http://www.sqltutorial.org/sqljoin-innerjoin.aspx ... read »
Feb 10, 2012 at 4:42 AM
Building A Twitter-Inspired RESTful API Architecture In ColdFusion
This is great, very useful Ben. I spotted a small typo in the api.cgm listing: <cfthrow type="Unauthroized" /> Cheers Stefan ... read »
Feb 9, 2012 at 10:35 PM
CFDirectory Filtering Uses Pipe Character For Multiple Filters (Thanks Steve Withington)
I was wondering if there would be a filter you could apply so that you got everything but what you included in the filter. As in show me all docs that are not a .pdf. ... read »
Feb 9, 2012 at 10:29 PM
Learning ColdFusion 9: Application-Specific Data Sources
@Ben, No offence, but if people were really wanting advanced features they would be using a platform like ASP.NET MVC. CFML is so structurally compromised as a tag-based scripting language that ... read »
Feb 9, 2012 at 10:03 PM
Subversion - Cleanup Failed To Process The Following Paths
@Leviaguirre, do you still have problems with this? ... read »