Ruby 从文件输出中删除其他换行符

Ruby 从文件输出中删除其他换行符,ruby,file,Ruby,File,我有一个脚本,它将数据从串行端口转储到终端和硬盘驱动器。终端的输出看起来很好,但是文件会在每行之后写入^M,从而每隔一行产生一个额外的换行符 违规代码: # run and dump to file. loop { # output data to log file. data = sp.read data.delete!("\C-M") # Removes escape character. if( data != "" ) puts da

我有一个脚本,它将数据从串行端口转储到终端和硬盘驱动器。终端的输出看起来很好,但是文件会在每行之后写入^M,从而每隔一行产生一个额外的换行符

违规代码:

# run and dump to file.
loop {
    # output data to log file.
    data = sp.read
    data.delete!("\C-M")   # Removes escape character.
    if( data != "" ) 
        puts data
        File.open($log_file, 'a') { |f| f.write( data ) }
    end
}
示例输出: 在终端上:

1
2
3
在文件中

1

2

3

编辑:解决方案是运行data.delete!(“\C-M”)。

尝试用read打开用ruby写入文件的数据。我怀疑您的问题在于回车字符,在将文件从windows传输到linux或通过某些邮件客户端下载文件时,这些字符有时会导致问题

我不知道您的串行数据是什么样子的,但您可以在写入数据变量之前对其进行一次彻底检查。试一试,看看效果如何


编辑:如果您想删除^M,也许可以尝试
sp.read.tr(“\r”,”)

我尝试在vim中打开输出文件,可以看到每行都以^M字符结尾。显然,有些流程认为在每行中添加一个“向下滚动窗口一行”字符是合适的。我找到了它,并修改了问题以反映这一点。然而,你的评论是正确的。谢谢,这不管用。是下面的注释,额外的换行是由^M序列创建的。Chomp删除最后的换行符,但不处理接收数据中的其他换行符。