From: Robert Dober Date: 2009-04-10T10:58:22+09:00 Subject: Re: DRY up consecutive gsub's - How to On Fri, Apr 10, 2009 at 3:30 AM, RichardOnRails wrote: > Hi, > > I have a csv file suitable for an Excel display.  The file has column- > names on certain row. > > In order to process subsequent rows I want to refer to their columns > symbolically using the column-names. That requires the column-names to > be cleaned up in order to create valid Ruby symbols. > > The following worked fine: >        if col_name >          col_name.gsub!(/[\s]/, "") >          col_name.gsub!(/[&]/, "And") >          col_name.gsub!(/[#]/, "Number") >        end > > Each of the following one-liners failed: >         col_name.gsub!(/[\s]/, ""). gsub!(/[&]/, "And").gsub!(/[#]/, > "Number") if col_name >         col_name.gsub(/[\s]/, ""). gsub(/[&]/, "And").gsub(/[#]/, "Number") > if col_name > > Can either of the one-liners be made to work? > > The code is show in a larger (easier to read) context at http://www.pastie.org/442456 > > Thanks in Advance, > Richard Here is a oneliner col.gsub!(/[\s&#]/){ |x| x == "#" ? "Number" : x == "&" ? "And" : "" } just to show that your code is much better. Why do you dislike it, it is readable and simple. If you are worried about changes, you might potentially factor that out [ /\s/, "", "&", "And", "#', "Number"].each_slice( 2 ) do | reg, rep | col.gsub! reg, rep end HTH Robert > > > > . > > > -- If you want to build a ship, don’t herd people together to collect wood and don’t assign them tasks and work, but rather teach them to long for the endless immensity of the sea. -- Antoine de Saint-Exupery