Search File Contents

Discussion in 'Ruby' started by Andy Dbest, Jun 8, 2008.

  1. Andy Dbest

    Andy Dbest Guest

    Hi Guys,

    I have a small code block that is frustrating me for some time now. I
    want to search for some text in a file. Simple isnt it?

    def read_file week_num
    week_num = week_num.to_s
    f = File.open("fixtures.txt", "r")
    lines = f.readlines
    #week_num = '1.'
    lines.each do|line|
    if line.chomp.eql? week_num
    puts "Found the week number"
    end
    end
    f.close
    end

    The above is the method, and I am searching for "1.". I am passing the
    variable "week_num" and i even tried to convert it to string. The search
    code as it is right now, does not output "Found the week number", even
    though the file contains "1."

    If i uncomment the line that assigns week_num to '1.' directly, then it
    works. What am i doing wrong?
    --
    Posted via http://www.ruby-forum.com/.
    Andy Dbest, Jun 8, 2008
    #1
    1. Advertising

  2. On Sunday 08 June 2008, Andy Dbest wrote:
    > Hi Guys,
    >
    > I have a small code block that is frustrating me for some time now. I
    > want to search for some text in a file. Simple isnt it?
    >
    > def read_file week_num
    > week_num = week_num.to_s
    > f = File.open("fixtures.txt", "r")
    > lines = f.readlines
    > #week_num = '1.'
    > lines.each do|line|
    > if line.chomp.eql? week_num
    > puts "Found the week number"
    > end
    > end
    > f.close
    > end
    >
    > The above is the method, and I am searching for "1.". I am passing the
    > variable "week_num" and i even tried to convert it to string. The search
    > code as it is right now, does not output "Found the week number", even
    > though the file contains "1."
    >
    > If i uncomment the line that assigns week_num to '1.' directly, then it
    > works. What am i doing wrong?


    If assiging week_num a value inside the method makes the code work, I'd say
    the problem is in the argument which is passed to the method. Have you tried
    to put a

    puts week_num

    at the beginning of the method, to see whether the argument you get is the one
    you expect?

    Stefano
    Stefano Crocco, Jun 8, 2008
    #2
    1. Advertising

  3. Andy Dbest

    Andy Dbest Guest

    Stefano Crocco wrote:
    > On Sunday 08 June 2008, Andy Dbest wrote:
    > If assiging week_num a value inside the method makes the code work, I'd
    > say
    > the problem is in the argument which is passed to the method. Have you
    > tried
    > to put a
    >
    > puts week_num
    >
    > at the beginning of the method, to see whether the argument you get is
    > the one
    > you expect?
    >
    > Stefano


    I tried the puts line, just inside the method and it does return '1.'
    for me. It kind of annoying...
    --
    Posted via http://www.ruby-forum.com/.
    Andy Dbest, Jun 8, 2008
    #3
  4. On Sunday 08 June 2008, Andy Dbest wrote:
    > Stefano Crocco wrote:
    > > On Sunday 08 June 2008, Andy Dbest wrote:
    > > If assiging week_num a value inside the method makes the code work, I'd
    > > say
    > > the problem is in the argument which is passed to the method. Have you
    > > tried
    > > to put a
    > >
    > > puts week_num
    > >
    > > at the beginning of the method, to see whether the argument you get is
    > > the one
    > > you expect?
    > >
    > > Stefano

    >
    > I tried the puts line, just inside the method and it does return '1.'
    > for me. It kind of annoying...


    Can you post a sample of the file you're searching in? This way, I can try
    your code myself and see what's going on.

    Stefano
    Stefano Crocco, Jun 8, 2008
    #4
  5. Andy Dbest

    Andy Dbest Guest

    Stefano Crocco wrote:
    > On Sunday 08 June 2008, Andy Dbest wrote:
    >> > at the beginning of the method, to see whether the argument you get is
    >> > the one
    >> > you expect?
    >> >
    >> > Stefano

    >>
    >> I tried the puts line, just inside the method and it does return '1.'
    >> for me. It kind of annoying...

    >
    > Can you post a sample of the file you're searching in? This way, I can
    > try
    > your code myself and see what's going on.
    >
    > Stefano


    sure...

    here is an extract of the file

    1.

    aaa.txt - bbb.txt
    aac.txt - bbc.tct

    2.

    aac.txt - bbb.txt
    aaa.txt - bbc.txt
    --
    Posted via http://www.ruby-forum.com/.
    Andy Dbest, Jun 8, 2008
    #5
  6. On Sunday 08 June 2008, Andy Dbest wrote:
    > Stefano Crocco wrote:
    > > On Sunday 08 June 2008, Andy Dbest wrote:
    > >> > at the beginning of the method, to see whether the argument you get is
    > >> > the one
    > >> > you expect?
    > >> >
    > >> > Stefano
    > >>
    > >> I tried the puts line, just inside the method and it does return '1.'
    > >> for me. It kind of annoying...

    > >
    > > Can you post a sample of the file you're searching in? This way, I can
    > > try
    > > your code myself and see what's going on.
    > >
    > > Stefano

    >
    > sure...
    >
    > here is an extract of the file
    >
    > 1.
    >
    > aaa.txt - bbb.txt
    > aac.txt - bbc.tct
    >
    > 2.
    >
    > aac.txt - bbb.txt
    > aaa.txt - bbc.txt


    I've tried it and it works even without the assignment. Are you sure there
    isn't any trailing space afer 1. in the method argument? Using puts as I
    suggested in my first post wouldn't have shown that. You can try examining the
    argument with p, instead of puts, which displays the string with special
    characters escaped and surrounded by quotes. If everything is correct, the
    line

    p week_num

    should output

    "1."

    If there are trailing spaces, you'll see something like

    "1. "

    Stefano
    Stefano Crocco, Jun 8, 2008
    #6
  7. Andy Dbest

    Andy Dbest Guest

    Stefano Crocco wrote:
    > On Sunday 08 June 2008, Andy Dbest wrote:


    > I've tried it and it works even without the assignment. Are you sure
    > there
    > isn't any trailing space afer 1. in the method argument? Using puts as I
    > suggested in my first post wouldn't have shown that. You can try
    > examining the
    > argument with p, instead of puts, which displays the string with special
    > characters escaped and surrounded by quotes. If everything is correct,
    > the
    > line
    >
    > p week_num
    >
    > should output
    >
    > "1."
    >
    > If there are trailing spaces, you'll see something like
    >
    > "1. "
    >
    > Stefano


    Thanks Stefano,

    the p week_num line did the trick, i noticed that there was a leading
    space. I was taking the input from an FXRuby text control, in which i
    introduced a space.

    Have fixed it now.

    Cheers and thanks.
    Andy
    --
    Posted via http://www.ruby-forum.com/.
    Andy Dbest, Jun 8, 2008
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page