From: Robert Klemme Date: 2004-09-07T15:50:09+09:00 Subject: Re: include? only true once "Matthew Margolis" schrieb im Newsbeitrag news:413CEF14.2070102@wisc.edu... > David A. Black wrote: > > >Hi -- > > > >On Tue, 7 Sep 2004, Matthew Margolis wrote: > > > > > > > >>David A. Black wrote: > >> > >> > >> > >>>Hi -- > >>> > >>>On Tue, 7 Sep 2004, Matthew Margolis wrote: > >>> > >>> > >>> > >>> > >>> > >>>>blockFile = File.new("blocklist.txt", "a+") > >>>>print blockFile.read.include?("aa") > >>>>print blockFile.read.include?("aa") > >>>> > >>>>blocklist.txt looks like > >>>>-------------------------------------------- > >>>>aa > >>>>ae > >>>>aj > >>>>au > >>>>ae > >>>>--------------------------------------------- > >>>> > >>>> > >>>>Why does #include? return true on the first call only? > >>>> > >>>> > >>>> > >>>> > >>>Because you've reached end-of-file :-) > >>> > >>> > >>>David > >>> > >>> > >>> > >>> > >>> > >>blockFile = File.new("blocklist.txt", "a+") > >> print blockFile.read.include?("aa") > >> blockFile.lineno = 0 > >> print blockFile.read.include?("aa") > >> > >>Still gives true false instead of true true > >> > >> > > > >I'm ignorant of #lineno= but it doesn't seem to affect EOF. (If you > >add an EOF test it will come out true.) But you could use #pos to get > >back to the beginning of the stream. > > > > > >David > > > > > > > Excellent, thank you. > > -Matthew Margolis Why don't you just: # complete: content = File.read("blocklist.txt") print content.include?("aa") print content.include?("aa") # line oriented: content = File.readlines("blocklist.txt") print content.include?("aa") print content.include?("aa") Much more efficient if the file fits into mem. Kind regards robert