我原以为这段代码可以工作,但正则表达式永远都不匹配.我在十六进制编辑器中查看了正在读取的数据,并验证了文件中确实存在十六进制D和十六进制a模式.

我也try 过正则表达式/\xD\xA/m和/\x0D\x0A/m,但它们也不匹配.

这是我现在的代码:

   lines2 = lines.gsub( /\r\n/m, "\n" )
   if ( lines == lines2 )
       print "still the same\n"
   else
       print "made the change\n"
   end

除了其他 Select ,知道我做错了什么也很好(以促进我的学习)

推荐答案

当你完成puts lines次时,你会得到什么?这会给你一个线索.

默认情况下,File.open以文本模式打开文件,因此\r\n个字符将自动转换为\n个字符.也许这就是lines总是等于lines2的原因.要防止Ruby解析行尾,请使用rb模式:

C:\> copy con lala.txt
a
file
with
many
lines
^Z

C:\> irb
irb(main):001:0> text = File.open('lala.txt').read
=> "a\nfile\nwith\nmany\nlines\n"
irb(main):002:0> bin = File.open('lala.txt', 'rb').read
=> "a\r\nfile\r\nwith\r\nmany\r\nlines\r\n"
irb(main):003:0>

但是从你的问题和代码中,我看到你只需要用默认的修饰符打开文件.您不需要任何转换,可以使用较短的File.read.

Ruby相关问答推荐

如何通过语法将Ruby Sorbet签名突出显示为不强调的 comments ?

Ruby 中的 Float#floor 和 Float#to_i 有什么区别?

Ruby - 给定一个嵌套数组的数组,如何仅比较每个嵌套数组的最后一个值来找到最大值?

有没有办法在 Capybara 中保持登录状态?

ruby `encode': "\xC3" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)

Vim 用 ruby​​ 语法高亮显示很慢

`require': no such file to load in ruby

我应该在我的 ruby​​ 脚本中定义一个 main 方法吗?

将数组分成 n 组 m 大小?

用元素填充数组 N 次

如何在 Ruby 符号中转义破折号-?

错误:Windows 的 SASS 安装

如何在课堂上使用 Enumerable mixin?

我的Ruby在哪里?

如何在不使用循环的情况下按数组中的计数分组

在 Ruby 中, coerce() 是如何工作的?

Python 中的一切都像 Ruby 一样是对象吗?

如何使用 Ruby 的 self 关键字

使用哈希值呈现 ERB 模板

def `self.function` 名称是什么意思?