Increment part of a string in Ruby

Posted by Rik on Stack Overflow See other posts from Stack Overflow or by Rik
Published on 2010-12-27T18:15:29Z Indexed on 2010/12/27 18:54 UTC
Read the original article Hit count: 299

Filed under:
|
|

I have a method in a Ruby script that is attempting to rename files before they are saved. It looks like this:

def increment (path)
    if path[-3,2] == "_#"
        print "    Incremented file with that name already exists, renaming\n"
        count = path[-1].chr.to_i + 1
        return path.chop! << count.to_s
    else
        print "    A file with that name already exists, renaming\n"
        return path << "_#1"
    end
end

Say you have 3 files with the same name being saved to a directory, we'll say the file is called example.mp3. The idea is that the first will be saved as example.mp3 (since it won't be caught by if File.exists?("#{file_path}.mp3") elsewhere in the script), the second will be saved as example_#1.mp3 (since it is caught by the else part of the above method) and the third as example_#2.mp3 (since it is caught by the if part of the above method).

The problem I have is twofold.

1) if path[-3,2] == "_#" won't work for files with an integer of more than one digit (example_#11.mp3 for example) since the character placement will be wrong (you'd need it to be path[-4,2] but then that doesn't cope with 3 digit numbers etc).

2) I'm never reaching problem 1) since the method doesn't reliably catch file names. At the moment it will rename the first to example_#1.mp3 but the second gets renamed to the same thing (causing it to overwrite the previously saved file).

This is possibly too vague for Stack Overflow but I can't find anything that addresses the issue of incrementing a certain part of a string.

Thanks in advance!

© Stack Overflow or respective owner

Related posts about ruby

Related posts about string