very new to Ruby, I’ve got the following situation. I have a file with values separated by new lines, they look like this:
18917
18927
18929
...
I want to prepend a folder path to all of them, then grab the first 2 characters and prepend that as well, then the value in the file and then append a ‘.jpg’ at the end so they would end up looking like this:
path/to/foler/18/18917.jpg
So I’ve code this ruby code:
folder = "/path/to/folder"
lines = File.readlines("values.csv")
images = lines.collect.to_s.gsub("\n", ".jpg,")
images.split(',').collect { |dogtag | puts "bad dog: #{folder}/#{dogtag[0,2]}/#{dogtag}" }
Now, this almost works, the part that is not working is the grabbing of the first 2 characters. I also tried it with the method outside quotes (and without the #{} of course) but it just produces an empty result.
Could someone please point out my folly?
Eventually I want to delete those images but I’m guessing that substituting ‘File.delete’ for ‘puts’ above would do the trick?
As usual, thanks in advance for taking the time to look at this.
You don’t seem to be understanding what
collectdoes.I would rewrite your snippet like this:
— Update for last comment: —
If you don’t want to use an if statement to check if a file exists before deleting it, you have two option (AFAIK).
Use
rescue:Or extend the
Fileclass with adelete_if_existsmethod. You can just put this at the top of your script:With this, you can do: