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