From: beny 18241 on

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
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
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
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
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

--