k=[]
path="E:/expr/amit.txt"
name="amit"
File.open("amit.txt").each do |l|
k<< l
end
puts k[0]
puts name.eql?("k[0]")
O/p amit
false
why o/p containing false??it should give true
k=[]
path="E:/expr/amit.txt"
name="amit"
File.open("amit.txt").each do |l|
k<< l
end
puts k[0]
puts name.eql?("k[0]")
O/p amit
false
why o/p containing false??it should give true
The value of name
is "amit". You're checking whether the string "amit"
is equal to the string "k[0]"
. It's not, so you get false.
What you probably meant to do was name.eql?(k[0])
, which would check whether the value k[0]
is "amit"
. However this would still return false, because k[0]
is "amit\n", not "amit"
.
To fix this, you should do k << l.chomp
instead of k << l
to remove the trailing \n
.
You're testing the string "amit"
against the string "k[0]"
. I think you probably want puts name.eql?(k[0])
Try doing a chomp before you save the k
k=[]
name="amit"
File.foreach("file") do |line|
k<<line.chomp
end
p k.grep(name)
puts name.eql?(k[0])
output
$ cat file
amit
submit
$ ruby test.rb
["amit"]
true
If you're not sure why your program isn't working, .inspect
is your friend.
k=[]
path="E:/expr/amit.txt"
name="amit"
File.open("amit.txt").each do |l|
puts "Debugging: l is #{l.inspect}"
k<< l
end
puts k[0]
puts name.eql?("k[0]")
puts "Debugging: name is #{name.inspect}, while k[0] is #{k[0].inspect}"