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