Input gevraagd. Kheb een perl script ontwikkeld dat mp3 filenamen zoals je die op het Internet vindt fatsoeneert. Bedoeling is om uiteindelijk een progje te hebben dat je in dosbox kan runnen en dat directories met namen van de artiest aanmaakt en daar de mp3's in kopieert/moved. Nu print ie alleen nog maar opgeschoonde filenamen uit en doet verder niets behalve vinden van deze mp3 in de source tree.
Hieronder is opzetje van het script, vraag: dekt deze fatsoenering de meeste filenaam variaties af?
Hieronder is opzetje van het script, vraag: dekt deze fatsoenering de meeste filenaam variaties af?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| use File::Copy;
use File::Find;
if (@ARGV !=2) { print "Usage mp3 <source dir> <destination tree>\n"; exit; }
my $name;
my $srcdir = $ARGV[0];
my $dstdir = $ARGV[1];
my $dir;
my $artist;
my $song;
find(\&wanted,$srcdir);
sub wanted {
if (/\.mp3$/) {
$name = "$File::Find::$_";
$dir = "$File::Find::dir";
$name =~ s/_/ /g; # convert underscores to spaces
$name =~ s/\s+/ /g; # delete multiple white space
$name =~ s/\-+/\-/g; # delete multiple minus signs
if ($name =~ /^\s*(\d+)?\s*(\-)?\s*([^\-]+)\s*\-\s*(.*?)\s*\.mp3$/) {
($artist,$song) = ($3,$4);
$artist =~ s/^\s*(.*?)\s*$/$1/; # trim leading and trailing spaces
$artist =~ s/\b(\w)/\u$1/g; # capitalize words
$artist =~ s/(['`]\we?) /\L$1 /g; # decapitalize single apostrophe words
$song =~ s/^\s*(.*?)\s*$/$1/; # trim leading and trailing spaces
$song =~ s/\b(\w)/\u$1/g; # capitalize words
$song =~ s/(['`]\we?) /\L$1 /g; # decapitalize single apostrophe words
print "$artist - $song".".mp3\n";
}
}
} |
[ Voor 5% gewijzigd door Essence op 02-01-2003 19:12 ]