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: 293
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