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 <subhead.4>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 +code ="[A-Z]{3}
">(.?)</issue>\s?/mi)
…
$codes.each do |code|
puts code
xmlfile.gsub!(/?/,
“<subhead.4>#{code}</subhead.4>/n
On Sep 20, 2007, at 11:41 AM, Peter B. wrote:
…
I’m getting the following. My “puts” statement, which is just there
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 = <<TEXT
The quick brown
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}</#{c}>”}
puts source
The quick brown
fox jumped over
the lazy dog
The quick brown
fox jumped over
the lazy dog
Regards, Morton
Morton G. wrote:
On Sep 20, 2007, at 11:41 AM, Peter B. wrote:
…
I’m getting the following. My “puts” statement, which is just there
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 = <<TEXT The quick brown jumped over the lazy The quick brown jumped over the lazy TEXT
The quick brown fox jumped over the lazy dog The quick brown fox jumped over the lazy dogcodes = %w[a b c d e f g]
source.gsub!(/<(\w*)>/) { c = codes.shift; “<#{c}>#{$1}</#{c}>”}
puts source
Regards, Morton
Thanks a lot, Morton. Yes, I’ve modified my approach. I just had to
expand my mind to really consider how to contain each discrete thing
that I want in these huge text files I’m getting. Once I’ve got them all
in an array, I see now that I can do stuff to each entry in the array.
Exactly what I need. Your suggestion helped. Thanks again.