When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips

Sections:
Sample Chapters
Commonly Asked Message Board Questions
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
XML Info
Information:
Feedback
Author an Article
ASP ASP.NET ASP FAQs Message Board Feedback

The 4 Guys Present: ASPFAQs.com

Jump to a FAQ
Enter FAQ #:
..or see our 10 Most Viewed FAQs.

4GuysFromRolla.com : ASP FAQS : FileSystemObject


Question:

How can I randomly select n lines from a text file?


[Print this FAQ]

Answer: Imagine the situation where you have a large text file and you want to randomly choose some subset of lines from the file. For example, imagine that you had hundreds of MP3s on your computer and a text file that had a listing of these files, such that each line of the text file contained the full path to the MP3 file. Now, you might want to have a program that randomly select, say, 10 MP3 files from the text file containing the list of all MP3s.

This task is fairly easy to accomplish using the FileSystemObject in tandem with VBScript's split function. The split function breaks up a delimited string into a one-dimensional array; therefore, if we read the entire contents of a file into a string and then use the split method (using new line characters (vbCrLf) as the delimiters), we can read an entire file's contents into an array, where each element in the array corresponds to a line in the file. (For more information on split, see: Parsing with split and join.)

First, we simply read the entire contents of the file into an array, aFiles, where each element in the array corresponds to a line in the text file:

Dim objFSO, objTS
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Set objTS = objFSO.OpenTextFile(filename)

'Now, read the contents of the file into a string
Dim s
s = objTS.ReadAll

'Now, use split to load the contents of the file into an array
Dim aFile
aFile = split(s, vbCrLf)

Easy enough. Now we can use the Rnd function to choose random values between 0 and the upper bound of aFile. To do this, first we must use the Randomize Timer function and then perform a loop to snip out the n random elements from the array.

Randomize Timer

'How many random elements from the array do we want?
Const n = 10

For i = 1 to n
  value = aFiles(Int(Rnd * UBound(aFiles)))

  'Now do something with value
Next

At each iteration of the loop, the variable value has a random entry from the array. Note that this simple algorithm does not guarantee that each random element from the array will be unique; that is, in the above example for each of the 10 iterations you may get the exact same value. For an algorithm that guarantees unique random values see this FAQ. Also, for more information on the FileSystemObject in general, be sure to puruse the FileSystemObject FAQ Category.

Happy Programming!


FAQ posted by Scott Mitchell at 2/8/2002 12:31:14 PM to the FileSystemObject category. This FAQ has been viewed 51,502 times.

Do you have a FAQ you'd like to suggest? Suggestions? Comments? If so, send it in! Also, if you'd like to be a FAQ Admin (creating/editing FAQs), let me know! If you are looking for other FAQs, be sure to check out the 4Guys FAQ and Commonly Asked Messageboard Questions!

Most Viewed FAQs:

1.) How can I format numbers and date/times using ASP.NET? For example, I want to format a number as a currency. (761643 views)
2.) I am using Access and getting a 80004005 error (or a [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)' error) when trying to open a connection! How can I fix this problem? (207777 views)
3.) How can I convert a Recordset into an array? Also, how can I convert an array into a Recordset? (202549 views)
4.) How can I quickly sort a VBScript array? (196039 views)
5.) How can I find out if a record already exists in a database? If it doesn't, I want to add it. (156019 views)
6.) How do I display data on a web page using arrays instead of Do...While...MoveNext...???... (152331 views)
7.) When I get a list of all files in a directory via the FileSystemObject, they aren't ordered in any reasonable way. How can I sort the files by name? Or by size? Or by date created? Or... (140381 views)
8.) For session variables to work, must the Web visitor have cookies enabled? (110162 views)
9.) Can I send emails without using CDONTS? (107083 views)
10.) How can I take the result of a SELECT...MULTIPLE or a group of same-named checkboxes and turn it into a query? That is, if the user selects 3 answers, how can I construct a query that looks for all 3? (106308 views)
Last computed at 9/17/2007 3:22:00 AM


ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article