【问题标题】:Different results from two identical-looking text files来自两个外观相同的文本文件的不同结果
【发布时间】: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 如果答案对您来说足够好,请单击复选标记“选择它”。 :)

标签: ruby text file-io


【解决方案1】:

我现在唯一能想到的是文件test.txt 的两个版本可能有不同的换行符。有三种类型的换行符:\n (linux)、\r\n (windows) 和 \r (mac)。尝试以二进制模式和/或文本模式打开文件,也许可以得到预期的结果。

关于您的评论中Notepad++的CRLF配置,您可以进入菜单设置->首选项->新建文档/默认目录->新建文档->格式->Windows。 (这是 5.8.6 版本的路径)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多