That just generates a randon numbers with 7 digits( any better way?). I can get whant I need using an "IF" but I am trying to do all in one regular expression.
#not using strict and -w for this example only
my $rd = int( rand(100000)) + 999999;
my @files = qw( XYZ12345_X05_20110805_8999999_00001.TXT XYZ12345_X05_2
+0110805_9999999.TXT);
#add dash between $3 and $4 to the .txt before processing them:::
#pad $2 with 0s
#replace the end of the file with a randon number if the filename ends
+ with _00001
foreach my $f(@files) {
if($f=~/(^\w{3})(\d{5,7})(_\w{1})(\w{1,2}_)(\d{8}\_)(\d{7}_\d{5}\.\w
+{3})/i) {
(my $xrenamed = $f) =~s/(^\w{3})(\d{5,7})(_\w{1})(\w{1,2}_)(\d{8}\
+_)(\d{7}_\d{5}\.\w{3})/$1.sprintf("%07d",$2).$3."-".$4.$5.$rd.".txt"/
+ie;
print "\n\n $xrenamed\n\n";
}else{
(my $xrenamed = $f) =~s/(^\w{3})(\d{5,7})(_\w{1})(\w{1,2}_)(\d{8
+}\_)(\d{7}_\.\w{3})/$1.sprintf("%07d",$2).$3."-".$4.$5.$6/ie;
print "\n\n $xrenamed\n\n";
}
}
Thanks! |