||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
s = objTS.ReadAll
'Now, use split to load the contents of the file into an array
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.
'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.