On 28.09.2008 03:03, jackster the jackle wrote: > thanks...I got that to work...now for my last question...I am trying to > match on a hash value. I have a text file that gets opened with 4 > different types of statements in it...the values are contained in my > hash called "h". The values in the hash are (IN,OUT,PP,AA). @acl_list > contains a bunch of firewall rules that either have the value IN,OUT,PP > or AA in them. What I am trying to do is loop through @acl_list, > substitute the value of h with the key (which works great) but then, I > need to put the number 1 in the first firewall rule that contains IN, > then the number 2 in the second firewall rule that contains IN etc. > When I'm finished with the "IN" rules, I want to do the same thing for > "OUT","PP" and "AA". > > What I have here works great but only for the "IN" rules: > > k= 1 > @acl_list.each do |acl| > h.each {|key,value| > acl.gsub!(/#{key}/,value)} > if acl[/IN/] > acl.gsub!(/^/,k.to_s) > k+=1 > puts acl > end > > What I really need is to match on the value of the hash, then add the > numbers to the beginning of each line. I thought the following would > work but it doen't (although #{value} does have the correct info in it). > Can anyone help me figure out how I can get the loop to match on the > value of my hash? I think if I can get this to work, everything will be > the way I need it. > > k= 1 > @acl_list.each do |acl| > h.each {|key,value| > acl.gsub!(/#{key}/,value)} > if acl[/#{value}/] > acl.gsub!(/^/,k.to_s) > k+=1 > puts acl > end It seems you are doing this too complicated and making your life harder than necessary. If I read you correctly this is what you want to do: you want to read a file where each line falls in one of four *fixed* classes (IN, OUT...). You want to number each class individually and print that out. If you use a Hash you can do something like this (proper variable naming goes a long way in making this readable and understandable): counters = Hash.new 0 ARGF.each do |line| line_class = line[/\b(?:IN|OUT|PP|AA)\b/] raise "Unknown rule" unless line_class print counters[line_class] += 1, " ", line end Cheers robert