【问题标题】:Rails: Files get filled with trailing whitespaceRails:文件充满尾随空格
【发布时间】:2016-12-19 16:19:57
【问题描述】:

我遇到的问题是,每当我将一些值保存到文件时,Rails 都会神奇地在每一行添加尾随空格。

例如,当我读取文件时,初始内容被操纵:

"cv" => "cv\r\n"

"cv\r\nvd" => "cv\r\n\r\nvd\r\n"

这是我创建文件的方式:

File.open(path, "w+") do |f|
    f.truncate(0)
    f.puts value
end

感谢每一个帮助!

【问题讨论】:

    标签: ruby-on-rails ruby file ruby-on-rails-5 puts


    【解决方案1】:

    理论

    如果value 没有尾随换行符,value.chomp 不会更改任何内容,因为换行符不是来自value,而是来自puts

    在任何不存在的地方写一个记录分隔符(通常是换行符) 已经以换行符结束。

    IO#write 是您正在寻找的方法。

    最后,f.truncate(0) 是不需要的,因为w+ 代表:

    "w+" 读写,将现有文件截断为零长度 或者创建一个新的文件进行读写。

    示例

    path = "test.txt"
    value = 2
    
    File.open(path, "w+") do |f|
        f.write value
    end
    
    p File.read(path)
    

    返回:

    "2"
    

    使用puts 而不是write,它返回:

    "2\n"
    

    字符串内的换行符?

    如果由于某种原因,value 是一个带有换行符的字符串,chompwrite 将无济于事。使用gsub 将多个换行符替换为一个:

    path = "test.txt"
    value = "Hello\r\n\r\nWorld\n\nLine #3\r\rLine #4"
    
    File.open(path, "w+") do |f|
        f.write value.gsub(/\R+/,"\n")
    end
    
    p File.read(path)
    #=> "Hello\nWorld\nLine #3\nLine #4"
    

    如果你想要空格而不是换行符:

    f.write value.gsub(/\R+/," ")
    

    【讨论】:

    • 嗯。 f.write value 不向文件添加任何内容。 f.write(value) 将值添加到文件中,但尾随空格。
    • 这出乎意料。 p value 返回什么?值是方法还是变量?你只有f.write value在线吗?
    • value 是一个变量,它返回例如gt\r\nki。当我阅读创建的文件时,我得到:gt\r\nnki
    • 所以有一个换行符inside value。你想用它做什么?
    • 这只是 Windows 的一次休息:en.wikipedia.org/wiki/Newline#Representations
    猜你喜欢
    • 2018-07-04
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2017-03-01
    • 2012-06-27
    相关资源
    最近更新 更多