Your source for ASP-related frequently asked questions and answers! : ASP FAQS : FileSystemObject

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

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

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.

Copyright 2017 QuinStreet Inc. All Rights Reserved.
Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers