【问题标题】:Ruby IO.readlines stops before the last line of a fileRuby IO.readlines 在文件的最后一行之前停止
【发布时间】:2014-02-05 20:39:06
【问题描述】:

我在 Windows 机器上使用 Ruby 1.9.3。

当我在一个文件上运行IO.readlines 时,我得到了一个奇怪而出乎意料的结果。在文件上运行IO.readlines 的结果是一个数组,它只以不是文件最后一行的行结束。例如,数组中的最后一个元素就是这个字符串:

MLOGIC(RESPONSE_FREQUENCY):  Parameter NUMERATOR_SUBSET has value \x01where

这是数组中的最后一个元素,即使文件实际上还有更多行。

当我使用 Ruby 2.0.0 在 OS X 上完全相同的文件上运行 IO.readlines 时,没有问题;它按预期将整个文件读入一个数组。

我们将不胜感激。

【问题讨论】:

    标签: ruby readlines


    【解决方案1】:

    IO.readlines(文档 1.9.32.0.0)在 Windows 与 OSX 上的主要区别是默认行分隔符 $/——在 unixoid 系统上,您会发现它是 "\n",而在 Windows 上是"\r\n"

    要获得相同的行为,您可以像这样调用IO.readlines

    arr = IO.readlines('./testfile', "\n")
    

    【讨论】:

    • 您好,感谢您的回复。我试过了,但没有改变结果。 IO.readlines 的结果仍然比它应该的要小。我认为文件中有一个十六进制字符。我认为 IO.readlines 到达该字符时会停止。
    • 嗯,它不应该。你试过File.read('./testfile').split("\n")吗?
    • 我刚刚尝试了拆分代码。结果相同。当它碰到一个对我来说似乎是十六进制字符的字符时它会停止。
    • 是的。 gist.github.com/anonymous/5745ee1462f4dc584ba1 在我的机器上看到的文本文件中,有一个字符,我的文本编辑器显示为向右箭头。它就在第四行末尾的 3 之前。不过,它并没有在要点中体现出来。感谢您的帮助。
    • 我会在晚上晚些时候进行调查(我在 UTC+1)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多