How to find second match in a file

Hi, everyone

My code opens a file and read line by line to find a given string as
first match. After I found one, how can i find the second match, a
different string, which is supposed to appear several lines after the
line of first match in a fast way?

for example, the following is the contents of a file

ka;sdfjaskf;asdfjk
skdfkfkfkfkfkfkfkfkfk
aks;flasjklfjkassjfksa
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbasdfdask;fjsdkalf
*************hello world***************ka;sdjkf;sjadkfj
asdfkasjdkfldjaskl;jfklas;
jaskdl;fjkasdjkfljdskla;jdfs
jkasl;jfkasjdklfjsal;df
asjkdfjkasd;fd;asdfj
***********Ruby*********a;sjdfklsdjal;fjkda;
asdfjjasklfjkdasjkfjaskl;
fjdka;dfdjasjfsd;a

So, after I found the match "hello world" by using a while loop, how can
i find the "Ruby" in the same while loop?

Looking forward to your reply. Thanks in advance

···

--
Posted via http://www.ruby-forum.com/.

Cheyne Li wrote:

Hi, everyone

My code opens a file and read line by line to find a given string as
first match. After I found one, how can i find the second match, a
different string, which is supposed to appear several lines after the
line of first match in a fast way?

for example, the following is the contents of a file

ka;sdfjaskf;asdfjk
skdfkfkfkfkfkfkfkfkfk
aks;flasjklfjkassjfksa
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbasdfdask;fjsdkalf
*************hello world***************ka;sdjkf;sjadkfj
asdfkasjdkfldjaskl;jfklas;
jaskdl;fjkasdjkfljdskla;jdfs
jkasl;jfkasjdklfjsal;df
asjkdfjkasd;fd;asdfj
***********Ruby*********a;sjdfklsdjal;fjkda;
asdfjjasklfjkdasjkfjaskl;
fjdka;dfdjasjfsd;a

So, after I found the match "hello world" by using a while loop, how can
i find the "Ruby" in the same while loop?

Looking forward to your reply. Thanks in advance

Not sure why you need it ...but seems you can do what you need by simple
doing this:
File.readlines("1.txt").each do |line|
   if line =~ /hello world/
      #do something
      p line
   end
   if line =~ /Ruby/
      #do something else
      p line
   end
end

···

--
Posted via http://www.ruby-forum.com/\.

It's probably easiest if you store the state of your search somewhere.

state = :initial

File.foreach "foo" do |line|
  case state
  when :initial
    if /first/ =~ line
      puts line
      state = :first_match
    end
  when :first_match
    if /second/ =~ line
      puts line
      state = :second_match
    end
  else
    # ignore
  end
end

Cheers

robert

···

2008/6/25 Cheyne Li <happy.go.lucky.clr@gmail.com>:

Hi, everyone

My code opens a file and read line by line to find a given string as
first match. After I found one, how can i find the second match, a
different string, which is supposed to appear several lines after the
line of first match in a fast way?

for example, the following is the contents of a file

ka;sdfjaskf;asdfjk
skdfkfkfkfkfkfkfkfkfk
aks;flasjklfjkassjfksa
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbasdfdask;fjsdkalf
*************hello world***************ka;sdjkf;sjadkfj
asdfkasjdkfldjaskl;jfklas;
jaskdl;fjkasdjkfljdskla;jdfs
jkasl;jfkasjdklfjsal;df
asjkdfjkasd;fd;asdfj
***********Ruby*********a;sjdfklsdjal;fjkda;
asdfjjasklfjkdasjkfjaskl;
fjdka;dfdjasjfsd;a

So, after I found the match "hello world" by using a while loop, how can
i find the "Ruby" in the same while loop?

--
use.inject do |as, often| as.you_can - without end