How to put unique lines from regexped file

Hi all,

I have such a question, when i open a file doing some grep stuff…


File.open(‘aa.xml’).each do |line|
dev_name = ARGV[1]
if line =~ /prf:CcppAccept/…line =~ /</prf:CcppAccept>/
if line =~ /rdf:li(image|audio|video).*</rdf:li>/
line.gsub(‘rdf:liimage/jpeg’, “INSERT INTO VMPOLICY_VALUES
VALUES(’#{dev_name}’,‘jpginpage’,‘true’,’#{$ver}’)”)).gsub(
“</rdf:li>”, “;”).each do |ss|

I recive output like

INSERT INTO TABLE VALUES(1,1,1)
INSERT INTO TABLE VALUES(1,2,2)
INSERT INTO TABLE VALUES(1,1,1)

now i wanted to put only that lines which are uniqe…
INSERT INTO TABLE VALUES(1,1,1)
INSERT INTO TABLE VALUES(1,2,2)

how i can do this ??

i thought about…

puts ss.unque

but its dont work

Please Help

Regards
beny18241

beny 18241 wrote:

Hi all,

I have such a question, when i open a file doing some grep stuff…


File.open(‘aa.xml’).each do |line|
dev_name = ARGV[1]
if line =~ /prf:CcppAccept/…line =~ /</prf:CcppAccept>/
if line =~ /rdf:li(image|audio|video).*</rdf:li>/
line.gsub(‘rdf:liimage/jpeg’, “INSERT INTO VMPOLICY_VALUES
VALUES(’#{dev_name}’,‘jpginpage’,‘true’,’#{$ver}’)”)).gsub(
“</rdf:li>”, “;”).each do |ss|

I recive output like

INSERT INTO TABLE VALUES(1,1,1)
INSERT INTO TABLE VALUES(1,2,2)
INSERT INTO TABLE VALUES(1,1,1)

now i wanted to put only that lines which are uniqe…
INSERT INTO TABLE VALUES(1,1,1)
INSERT INTO TABLE VALUES(1,2,2)

how i can do this ??

i thought about…

puts ss.unque

but its dont work

Please Help

Regards
beny18241

ok i figure it out :slight_smile:

puts ss unless ss == @prev; @prev = ss

cheers

On 20.12.2009 12:50, beny 18241 wrote:

    line.gsub('<rdf:li>image/jpeg', "INSERT INTO VMPOLICY_VALUES

now i wanted to put only that lines which are uniqe…
but its dont work
puts ss unless ss == @prev; @prev = ss
That works only if the input is ordered. For unordered input here’s an
efficient way:

require ‘set’

unique = Set.new

File.foreach(‘aa.xml’) do |line|
x = … line …
puts x if unique.add? x
end

Of course you can also use a Hash for this.

unique = {}

File.foreach(‘aa.xml’) do |line|
x = … line …

unique.fetch x do
unique[x] = true
puts x
end
end

Btw, since your input appears to be XML it’s probably a better idea to
process it with XML tools like REXML and the like.

Kind regards

robert

Robert K. wrote:

require ‘set’

unique = Set.new

File.foreach(‘aa.xml’) do |line|
x = … line …
puts x if unique.add? x
end

That’s fine for the plodding proles, but we cossacks always shout the
battle-cry: “We don’t need no stinkin’ loops!”

puts IO.readlines(‘aa.xml’).map{|s| s.sub( … )}.uniq

Everything must be done in one fell swoop or not at all!

On 20.12.2009 15:40, W. James wrote:

That’s fine for the plodding proles, but we cossacks always shout the
battle-cry: “We don’t need no stinkin’ loops!”

puts IO.readlines(‘aa.xml’).map{|s| s.sub( … )}.uniq

Everything must be done in one fell swoop or not at all!

Strong words, but I hope you are aware that this, taken as a general
rule, is bad advice.

Cheers

robert

Robert K. wrote:

On 20.12.2009 15:40, W. James wrote:

That’s fine for the plodding proles, but we cossacks always shout the
battle-cry: “We don’t need no stinkin’ loops!”

puts IO.readlines(‘aa.xml’).map{|s| s.sub( … )}.uniq

Everything must be done in one fell swoop or not at all!

Strong words, but I hope you are aware that this, taken as a general
rule, is bad advice.

@geekdom = {@everything.reject {|e| !e.fell_swoop?}}.good_advice? ?
:alive : :dead

:slight_smile:

Cheers

robert

Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]Â