John Edwards wrote:
> 
> Hi group.

Hello,

> I have the following snippet of code. It's not working and I've been going
> round in circles trying to figure out why.
> 
> I need a routine that will look at the filename, if that filename already
> exists, then add a (1) to the end. I've got the checking for existance
> sorted, it's the generation of the new file name that is the issue.
> 
> E.g. test.txt exists so create test(1).txt
> 
> If test(1).txt exists then create test(2).txt and so on
> 
> Here is the problematic code I have so far
> 
> -- code --
> my ($name, $ext) = split(/\./,$fileoutname);
> 
>     if ($name =~ /\((\d{1,1})\)$/) { # Looks for (1) on the end for example
>         my $number = $1;
>         $number++;
>         $name =~ tr/\(\d\)/\($number\)/;
>     } else {
>         $name .= "(1)";
> }
> 
> $fileoutname = "$name\.$ext";
> 
> -- end code --
> 
> There's probally some really basic errors in there, and maybe a much better
> way of doing it...


This should do what you want:

use File::Basename;

my ( $name, $path, $ext ) = fileparse( $fileoutname, '\..*' );

while ( -e "$path$name$ext" ) {
    $name .= '(1)' unless $name =~ s/\((\d+)\)$/'('.($1+1).')'/e;
    }

$fileoutname = "$path$name$ext";



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to