Shuffle
John Reimer
terminal.node at gmail.com
Thu Jan 24 21:03:10 PST 2008
Walter Bright wrote:
> For fun, I ordered a new car stereo that would play music from an SD
> card or USB stick(rather than from CD), and installed it over the
> weekend. The problem is loading songs onto the SD card from my home
> music server, which I like to hear played at random.
>
> The solution is a simple D program, shuffle, which will randomly copy
> music files to an SD card until it fills up. Have some fun with it!
> ----------------------------
>
> /* Program to randomly copy music files from source to destination device.
> * Written in the D programming language.
> * Written by Walter Bright, http://www.digitalmars.com
> * Placed into the Public Domain.
> */
>
>
> import std.file;
> import std.stdio;
> import std.string;
> import std.c.stdlib;
> import std.path;
> import std.random;
>
> int main(string[] args)
> {
> if (args.length != 3)
> { writefln("Usage: shuffle fromdir todir");
> exit(1);
> }
> auto fromdir = args[1];
> auto todir = args[2];
>
> /* Recursively search for all the mp3 and wma files in directory
> fromdir
> * and put them into files[]
> */
> string[] files;
> bool callback(DirEntry *de)
> {
> if (de.isdir)
> listdir(de.name, &callback); // recurse into subdirectories
> else
> {
> // Collect only files with mp3 and wma extensions
> auto ext = getExt(de.name);
> if (fnmatch(ext, "mp3") || fnmatch(ext, "wma"))
> files ~= de.name;
> }
> return true; // keep going
> }
> std.file.listdir(fromdir, &callback);
>
> writefln(files.length, " music files");
>
> /* The loop will normally quit via an exception when the target device
> * is full. But if there are not enough files in the source to fill
> * up the target, the loop ensures it will still eventually quit.
> */
> for (size_t i = 0; i < files.length; i++)
> {
> auto j = std.random.rand() % files.length;
> auto fromfile = files[j];
> auto tofile = std.path.join(todir, basename(fromfile));
> writefln("%s => %s", fromfile, tofile);
> std.file.copy(fromfile, tofile);
> }
>
> writefln("Done");
> return 0;
> }
And what would be the Tango equivalent, I wonder? ;)
More information about the Digitalmars-d-announce
mailing list