2011-08-30 77 views
2

我有一个脚本可以将数据从串口转储到终端和硬盘。到终端的输出看起来很好,但是文件在写入一个^ 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 !(“\ CM”)在读取后。

回答

0

我不知道你的串行数据是怎么样的,但你总是可以在写之前在数据变量上做一个chomp。尝试一下,看看它是如何发展的。

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

+0

不起作用。下面是一个评论,额外的换行符是由^ M序列创建的。 Chomp删除最终的换行符,但对接收到的数据中的其他换行符不做任何处理。 – Kenneth

1

尝试打开用ruby写入文件的数据,并读取。我怀疑你的问题是回车符,有时会导致文件从Windows传输到Linux或通过某些邮件客户端下载文件时出现问题。

+0

我试着在vim打开输出文件,可以看到每个符合^ M字结尾。显然,某些过程认为适合于向每行添加一个“向下滚动窗口一行”字符。 – Kenneth

+0

我想通了,修改了这个问题来反映这个问题。然而,你的评论导致了正确的道路。谢谢。 – Kenneth