From: beny 18241 on 18 Dec 2009 08:27 Hi, Please can anybody tell how to grep a block? between 2 string i had few lines of code example: <mms:MmsCcppAccept> 1 2 3 4 5 </mms:MmsCcppAccept> i've tried that way but its not working, see below my code: --- #!/usr/bin/ruby filename = ARGV[0] File.open(filename).each do |line| if line =~ /<mms:MmsCcppAccept>/../<\/mms:MmsCcppAccept>/ puts line end end ---- Please help me Regards Beny18241 -- Posted via http://www.ruby-forum.com/.
From: Eric Russell on 18 Dec 2009 08:47 try: #!/usr/bin/ruby filename = ARGV[0] File.open(filename).each do |line| if line =~ /<mms:MmsCcppAccept>/..line =~ /<\/mms:MmsCcppAccept>/ puts line end end Is this what you're looking for?
From: beny 18241 on 18 Dec 2009 08:49 ok closed Ifigue it out :) puts ARGF.read.scan(/<mms:MmsCcppAccept>.*?<\/mms:MmsCcppAccept>/m) beny18241 beny 18241 wrote: > > Hi, > > Please can anybody tell how to grep a block? > between 2 string i had few lines of code > > example: > <mms:MmsCcppAccept> > 1 > 2 > 3 > 4 > 5 > </mms:MmsCcppAccept> > > i've tried that way but its not working, see below my code: > > --- > #!/usr/bin/ruby > > filename = ARGV[0] > > > File.open(filename).each do |line| > if line =~ /<mms:MmsCcppAccept>/../<\/mms:MmsCcppAccept>/ > puts line > end > end > ---- > > > Please help me > > Regards > Beny18241 -- Posted via http://www.ruby-forum.com/.
From: Robert Klemme on 18 Dec 2009 09:39 2009/12/18 beny 18241 <beny18241(a)gmail.com>: > ok closed Ifigue it out :) > > puts ARGF.read.scan(/<mms:MmsCcppAccept>.*?<\/mms:MmsCcppAccept>/m) Eric's solution is better for large files because it requires reading the file line by line only. Note that it uses a special feature of "if" when using a range with boolean expressions: in that case matching state is stored and the complete expression is true when the first matches, stays true and only switches back to false if the second matches: irb(main):001:0> 10.times {|i| if /^3/ =~ i.to_s .. /^7/ =~ i.to_s; puts i; end} 3 4 5 6 7 => 10 irb(main):002:0> 10.times {|i| if i == 3 .. i == 7; puts i; end} 3 4 5 6 7 => 10 Note: the second example is merely for demonstration purposes, it can also be done with a single integer range match: irb(main):003:0> 10.times {|i| if (3..7) === i; puts i; end} 3 4 5 6 7 => 10 Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/
From: William James on 18 Dec 2009 13:54 beny 18241 wrote: > > Hi, > > Please can anybody tell how to grep a block? > between 2 string i had few lines of code > > example: > <mms:MmsCcppAccept> > 1 > 2 > 3 > 4 > 5 > </mms:MmsCcppAccept> > > i've tried that way but its not working, see below my code: > > --- > #!/usr/bin/ruby > > filename = ARGV[0] > > > File.open(filename).each do |line| > if line =~ /<mms:MmsCcppAccept>/../<\/mms:MmsCcppAccept>/ > puts line > end > end > ---- The tiny language Awk is good for things like this. awk "/<mms:MmsCcppAccept>/,/<\/mms:MmsCcppAccept>/" file --
|
Next
|
Last
Pages: 1 2 Prev: problem requiring gems under 1.9.1 mingw Next: ruby in twenty minutes not work |