If this is really the case I'd say the QuickRex Plugin is broken or you feed different files. Since you match for a non zero number of white space characters before the equal sign, it should not match, since there is none in the file contents you showed. You could change to \s* or leave it out completely.
Kind regards
robert
···
On 23.02.2007 08:36, Rebhan, Gilbert wrote:
Hi,
i have a txtfile like that =
bla1
foo=red
bla2
foo=green
bla3
foo=yellow
and i want to get i.e. bla1 and the corresponding value of foo
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
and i want to get i.e. bla1 and the corresponding value of foo
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
Well... for each line of the file you are trying to match 2 lines. That's impossible :). Read the file in "paragraph mode" and match each paragraph, or read it whole and scan it for your regexp.
It's because you're only searching within each line individually, whereas
your regexp matches ( word, space, word=word ) in one go. Using 'each' it
will be invoked first with "bla1\n" and then with "foo=red\n", neither of
which matches by itself.
If it's a small file then just slurp it in all in one go:
ans = File.open("sample.txt").read.scan(/(\w+)\s+(\w+=)(\w+)/)
p ans
Your regexp works, but personally I would add some anchors, i.e.
ans = File.open("sample.txt").read.scan(/^(\w+)\s+(\w+=)(\w+)$/)
p ans
If you want to avoid reading the whole file in, there are more complex
solutions, e.g.
require 'enumerator'
ans = File.open("sample.txt").each_cons(2) do |line1, line2|
next unless line1 =~ /^(\w+)$/
cat = $1
next unless line2 =~ /^(\w+)=(\w+)$/
puts "#{cat}: #{$1} => #{$2}"
end
HTH,
Brian.
···
On Fri, Feb 23, 2007 at 04:36:05PM +0900, Rebhan, Gilbert wrote:
Hi,
i have a txtfile like that =
bla1
foo=red
bla2
foo=green
bla3
foo=yellow
and i want to get i.e. bla1 and the corresponding value of foo
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
-----Original Message-----
From: Robert Klemme [mailto:shortcutter@googlemail.com]
Sent: Friday, February 23, 2007 9:15 AM
To: ruby-talk ML
Subject: Re: File.open with line =~ /.../
On 23.02.2007 08:36, Rebhan, Gilbert wrote:
Hi,
i have a txtfile like that =
bla1
foo=red
bla2
foo=green
bla3
foo=yellow
and i want to get i.e. bla1 and the corresponding value of foo
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
Any ideas ?
/*
If this is really the case I'd say the QuickRex Plugin is broken or you
feed different files. Since you match for a non zero number of white
space characters before the equal sign, it should not match, since there
is none in the file contents you showed. You could change to \s* or
leave it out completely.
*/
hmm, the QuickRex Plugin can evaluate with the Regular Expression
Implementation for =
Java
Jakarta Oro Perl 5
Jakarta Oro Awk
JRegex
the regex
(\w+)\r\n(\w+=)(\w+) works in all implementations except the Awk
also the regex (\w+)\s+(\w+=)(\w+) works for all except the Awk
implementation
so i get = $1 > bla1 $2 >foo $3 > red with both regex
Did only simple regex operations on one line in ruby until now.
What's wrong with my regex ?
-----Original Message-----
From: Carlos [mailto:angus@quovadis.com.ar]
Sent: Friday, February 23, 2007 10:46 AM
To: ruby-talk ML
Subject: Re: File.open with line =~ /.../
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
/*
Well... for each line of the file you are trying to match 2 lines.
That's impossible :). Read the file in "paragraph mode" and match each
paragraph, or read it whole and scan it for your regexp.
*
Maybe I was too fast - I overlooked that you are trying to match multiple lines. In that case of course you have to feed multiple lines - not a single line at a time as Carlos pointed out.
Kind regards
robert
···
On 23.02.2007 09:59, Rebhan, Gilbert wrote:
Hi,
-----Original Message-----
From: Robert Klemme [mailto:shortcutter@googlemail.com] Sent: Friday, February 23, 2007 9:15 AM
To: ruby-talk ML
Subject: Re: File.open with line =~ /.../
On 23.02.2007 08:36, Rebhan, Gilbert wrote:
Hi,
i have a txtfile like that =
bla1
foo=red
bla2
foo=green
bla3
foo=yellow
and i want to get i.e. bla1 and the corresponding value of foo
i tried with
File.open("Y:/test/sample.txt", "r").each do |line|
puts $1<<' : '<< $3 if line =~ /(\w+)\s+(\w+=)(\w+)/
end
but somehow the regex doesn't work ?!
whereas it works in the QuickRex Plugin for Eclipse
Any ideas ?
/*
If this is really the case I'd say the QuickRex Plugin is broken or you feed different files. Since you match for a non zero number of white space characters before the equal sign, it should not match, since there
is none in the file contents you showed. You could change to \s* or leave it out completely.
*/
hmm, the QuickRex Plugin can evaluate with the Regular Expression
Implementation for =
Java
Jakarta Oro Perl 5
Jakarta Oro Awk
JRegex
the regex
(\w+)\r\n(\w+=)(\w+) works in all implementations except the Awk
also the regex (\w+)\s+(\w+=)(\w+) works for all except the Awk
implementation
so i get = $1 > bla1 $2 >foo $3 > red with both regex
Did only simple regex operations on one line in ruby until now.
What's wrong with my regex ?