Forum: Ruby Simple regexp: Matching CRLF in a Windows file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Wes G. (Guest)
on 2006-05-17 20:33
All,

I'm trying to do subs on CRLF in a Windows file, but I'm having a time
of it trying to get the regexp working.

I am sure that I have a text file with Windows newlines (CRLF) embedded
in it

This doesn't work:

newline = "\C-J\C-M"
puts IO.read(@document.path) =~ /#{newline}/

This doesn't work:

newline = "\n\r"
puts IO.read(@document.path) =~ /#{newline}/

Do I need to escape the control characters somehow so that I can match
on them?

I'm assuming it's possible to use control characters in a regexp.

Thanks,
Wes
Wes G. (Guest)
on 2006-05-17 20:43
Apparently just matching on \n works.

So, Ruby is really smart enough to use \n as a platform-independent
newline character?  Impressive.

Wes

Wes G. wrote:
> All,
>
> I'm trying to do subs on CRLF in a Windows file, but I'm having a time
> of it trying to get the regexp working.
>
> I am sure that I have a text file with Windows newlines (CRLF) embedded
> in it
>
> This doesn't work:
>
> newline = "\C-J\C-M"
> puts IO.read(@document.path) =~ /#{newline}/
>
> This doesn't work:
>
> newline = "\n\r"
> puts IO.read(@document.path) =~ /#{newline}/
>
> Do I need to escape the control characters somehow so that I can match
> on them?
>
> I'm assuming it's possible to use control characters in a regexp.
>
> Thanks,
> Wes
Dave B. (Guest)
on 2006-05-17 21:22
(Received via mailing list)
Wes G. wrote:
>> I am sure that I have a text file with Windows newlines (CRLF) embedded
>> in it
>>
>> This doesn't work:
>>
>> newline = "\C-J\C-M"
>> puts IO.read(@document.path) =~ /#{newline}/

And then:
> Apparently just matching on \n works.
>
> So, Ruby is really smart enough to use \n as a platform-independent
> newline character?  Impressive.

Ruby on Windows automatically replaces \r\n with \n on input and
vice-versa on output unless you tell open to use binary mode:

irb> File.open("test.txt","w") {|f| f.print "\n" } # write, normal mode
=> nil
irb> File.open("test.txt","r") {|f| f.read } # read, normal mode
=> "\n"
irb> File.open("test.txt","rb") {|f| f.read } # read, binary mode
=> "\r\n"
irb> File.open("test.txt","wb") {|f| f.print "\n" } # write, binary mode
=> nil
irb> File.open("test.txt","rb") {|f| f.read }
=> "\r\n"

Cheers,
Dave
This topic is locked and can not be replied to.