From: Morton Goldberg Date: 2007-09-21T09:40:28+09:00 Subject: Re: Iterating through a file, sticking iterated array entries in On Sep 20, 2007, at 11:41 AM, Peter Bailey wrote: > I've got an array, a listing of "titles" in an xml file. Basically, I > want to iterate through my file and, wherever I see the tag > , I want to replace that with code subhead.4>, > where "code" is the next entry in the stack of my array. Now, I've > tried > this a number of ways and it does it, but, it doesn't cycle through my > array entries. It populates all of my substitutions with just the > first > entry in the array, none of the subsequent ones. > ... > $codes = [] > $codes = xmlfile.scan(/\s*(.*?)<\/issue>\s*?/mi) > ... > $codes.each do |code| > puts code > xmlfile.gsub!(/?/, > "#{code}/n") > end > > I'm getting the following. My "puts" statement, which is just there > for > checking, does indeed list each entry of the array, though. > > Trade (Domestic & Foreign)/n
> which is correct, but, I'm getting it for all 115 occurrences of the > tag. > > Maybe gsub isn't the way to do this. Obviously, I'm trying to iterate > through every instance of and simply replace it with > the > above code. Is gsub not an iteration tool? The gsub! matches all the substitution targets on the first iteration of the 'each'; therefore, no matches occur on any subsequent iterations. Try something like: source = < jumped over the lazy The quick brown jumped over the lazy TEXT codes = %w[a b c d e f g] source.gsub!(/<(\w*)>/) { c = codes.shift; "<#{c}>#{$1}"} puts source The quick brown fox jumped over the lazy dog The quick brown fox jumped over the lazy dog Regards, Morton