How can I get this backslash-eliminating behavior when reading afile?

Discussion in 'Ruby' started by Phil Tomson, Dec 31, 2007.

  1. Phil Tomson

    Phil Tomson Guest

    I'm trying to write a parser for a file format that allows backslashes
    '\' at the end of lines. The format I'm trying to parse treats
    backslashes at the end of lines just like the Ruby parser would treat
    them if they occured in a ruby source file.

    The double quotes string constructor does what I want it to in this case:

    irb(main):006:0> str = "line1 \
    irb(main):007:0" still more line1 \
    irb(main):008:0" even more line1"
    => "line1 still more line1 even more line1" <- this is exactly what I want


    However, if I read a string in from a file, I don't get what I want:
    $ cat testfile
    line 1 \
    still on line 1\
    even more line 1

    irb(main):001:0> str = File.read("testfile")
    => "line 1 \\\nstill on line 1\\\neven more line 1\n"

    I'd prefer not to even know about the backslashes or '\n's, so I'd
    rather have the behavior that the double quotes string constructor
    gives me:
    => "line1 still more line1 even more line1"

    Is there any way to get this behavior when reading a file into a string?

    Phil
     
    Phil Tomson, Dec 31, 2007
    #1
    1. Advertising

  2. Phil Tomson

    Phil Tomson Guest

    On 12/30/07, Phil Tomson <> wrote:
    > I'm trying to write a parser for a file format that allows backslashes
    > '\' at the end of lines. The format I'm trying to parse treats
    > backslashes at the end of lines just like the Ruby parser would treat
    > them if they occured in a ruby source file.
    >
    > The double quotes string constructor does what I want it to in this case:
    >
    > irb(main):006:0> str = "line1 \
    > irb(main):007:0" still more line1 \
    > irb(main):008:0" even more line1"
    > => "line1 still more line1 even more line1" <- this is exactly what I want
    >
    >
    > However, if I read a string in from a file, I don't get what I want:
    > $ cat testfile
    > line 1 \
    > still on line 1\
    > even more line 1
    >
    > irb(main):001:0> str = File.read("testfile")
    > => "line 1 \\\nstill on line 1\\\neven more line 1\n"
    >
    > I'd prefer not to even know about the backslashes or '\n's, so I'd
    > rather have the behavior that the double quotes string constructor
    > gives me:
    > => "line1 still more line1 even more line1"
    >
    > Is there any way to get this behavior when reading a file into a string?
    >
    > Phil
    >


    ah, of course, I could just to this:
    str = File.read("testfile").gsub(/\\\n/,'')

    That does what I asked for... now I realize that I probably don't want
    to do this since the line numbering will be all off when reporting
    errors...

    Phil
     
    Phil Tomson, Dec 31, 2007
    #2
    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.
Similar Threads
  1. Chuck Amadi
    Replies:
    0
    Views:
    525
    Chuck Amadi
    Jun 22, 2004
  2. Vincent Texier
    Replies:
    3
    Views:
    2,285
    Vincent Texier
    Jul 1, 2004
  3. Seid Mohammed
    Replies:
    0
    Views:
    283
    Seid Mohammed
    Nov 21, 2008
  4. Markus Fischer
    Replies:
    1
    Views:
    375
    Markus Fischer
    May 31, 2011
  5. Replies:
    8
    Views:
    163
    Dr.Ruud
    Jan 2, 2008
Loading...

Share This Page