【发布时间】:2014-03-09 15:06:19
【问题描述】:
我有我想要阅读的文本文件“test.txt”。它有几行:
line1
line2
trim(1255, 158597)
#712, 272, 4, 102
我正在使用以下代码:
itrimcmd = ""
secondline = ""
File.open("test.txt").each_line { |line|
puts "[8]... #{line}"
if line =~ /^trim/ then itrimcmd = line end
if line =~ /^#/ then secondline = line end
}
puts "itrimcmd: #{itrimcmd}"
puts "secondline: #{secondline}"
我的代码不适用于此文件。输出:
#712, 272, 4, 102)
itrimcmd:
secondline:
如果我用完全相同的内容重新键入第二个文件,这一次,我会得到正确的结果:
line1
line2
trim(1255, 158597)
#712, 272, 4, 102
我看不出这两个文本文件有什么区别。正确输出:
[2]... line1
[2]... line2
[2]... trim(1255, 158597)
[2]... #712, 272, 4, 102
itrimcmd: trim(1255, 158597)
secondline: #712, 272, 4, 102
我在 Windows 7 上使用 Ruby 1.9.3。
【问题讨论】:
-
我现在唯一能想到的是文件
test.txt的两个版本可能有不同的换行符。有三种类型的换行符:\n(linux)、\r\n(windows) 和\r(mac)。尝试以二进制模式和/或文本模式打开文件,也许可以得到预期的结果。 -
那是正确的。第一个文件(没有按预期工作)只有 CR (\r) 作为行尾,而不是 CRLF (\r\n)。现在我需要弄清楚为什么 Notepad++ 在这个问题上不一致,以及如何强制它始终使用 \r\n。
-
@SonySantos 让它成为答案!
-
@jen 如果答案对您来说足够好,请单击复选标记
✓“选择它”。 :)