What's going on here with gsub?

Hi,
I’m baffled by this problem. If I define a single file, I can use gsub
to create the same name, with different extensions. But, when I do it
with a list of files, it doesn’t work. Why is the code below giving me
nothing but .tif files, when, I’m asking for three different file types:
tif, png, and pdf?

Thanks,
Peter

Work with one. . . .
L:\tiff\cdtiff\47000>irb
irb(main):001:0> tiffile = “wy47089.tif”
=> “wy47089.tif”
irb(main):002:0> pngfile = tiffile.gsub(/.tif/, “.png”)
=> “wy47089.png”
irb(main):003:0> pdffile = tiffile.gsub(/.tif/, “.pdf”)
=> “wy47089.pdf”
irb(main):004:0> puts “#{tiffile} #{pngfile} #{pdffile}”
wy47089.tif wy47089.png wy47089.pdf

Doesn’t work with many. . . .
L:\tiff\cdtiff\47000>irb
irb(main):001:0> Dir.glob(“wy*.tif”).each do |tiffile|
irb(main):002:1* pngfile = tiffile.gsub(/.tif/, “.png”)
irb(main):003:1> pdffile = tiffile.gsub(/.tif/, “.pdf”)
irb(main):004:1> puts “#{tiffile} #{pngfile} #{pdffile}”
irb(main):005:1> end
WY47040.TIF WY47040.TIF WY47040.TIF
WY47046.TIF WY47046.TIF WY47046.TIF
WY47050.TIF WY47050.TIF WY47050.TIF
WY47057.TIF WY47057.TIF WY47057.TIF
WY47089.TIF WY47089.TIF WY47089.TIF
=> [“WY47040.TIF”, “WY47046.TIF”, “WY47050.TIF”, “WY47057.TIF”,
“WY47089.TIF”]

Peter B. wrote:

Hi,
I’m baffled by this problem. If I define a single file, I can use gsub
to create the same name, with different extensions. But, when I do it
with a list of files, it doesn’t work. Why is the code below giving me
nothing but .tif files, when, I’m asking for three different file types:
tif, png, and pdf?

Thanks,
Peter

“TIF” and “tif” is not the same. You probably want the //i switch which
makes regexen case insensitive. Also I suggest you anchor your regexp,
else you might have unwanted results. E.g. gsub(/.tif\z/i, …)

Regards
Stefan

Stefan R. wrote:

Peter B. wrote:

Hi,
I’m baffled by this problem. If I define a single file, I can use gsub
to create the same name, with different extensions. But, when I do it
with a list of files, it doesn’t work. Why is the code below giving me
nothing but .tif files, when, I’m asking for three different file types:
tif, png, and pdf?

Thanks,
Peter

“TIF” and “tif” is not the same. You probably want the //i switch which
makes regexen case insensitive. Also I suggest you anchor your regexp,
else you might have unwanted results. E.g. gsub(/.tif\z/i, …)

Regards
Stefan

Thanks, Stefan. You’re right. I’ve been a Windows guy so long that I
overlook the case stuff sometimes. Thanks a lot!

2007/7/19, Peter B. [email protected]:

Peter

“TIF” and “tif” is not the same. You probably want the //i switch which
makes regexen case insensitive. Also I suggest you anchor your regexp,
else you might have unwanted results. E.g. gsub(/.tif\z/i, …)

Regards
Stefan

Thanks, Stefan. You’re right. I’ve been a Windows guy so long that I
overlook the case stuff sometimes. Thanks a lot!

Some other remarks: in your case sub is sufficient and you should
probably anchor the expression at the end - just to cover cases where
the sequence occurs somewhere in between.

Kind regards

robert