使用Ruby如何避免将额外的行写入文件

时间:2012-05-20 19:17:58

标签: ruby

以下Ruby代码会导致额外的行被写入,我试图找出导致这种情况的原因。

我的Ruby代码:

File.delete(RAILS_ROOT + '/app/views/filer/' + @navn + ".html.erb")
filen = File.open(RAILS_ROOT + '/app/views/filer/' + @app.slug + ".html.erb", "a+")
filen.write("#{params[:app][:cod]}")

我检查过这些参数:

Content-Disposition: form-data; name="app[cod]" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da"> <head> <title>Ruby on Rails: Welcome aboard</title> <%= javascript_include_tag 'jquery' %>

但是当创建文件时,会添加新行:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">

<head> <title>Ruby on Rails: Welcome aboard</title>

<%= javascript_include_tag 'jquery' %>

应该是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">
<head> <title>Ruby on Rails: Welcome aboard</title>
<%= javascript_include_tag 'jquery' %>

这是铁路检查的一个问题:

"cod"=>"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"da\">\r\n<head> 

2 个答案:

答案 0 :(得分:0)

我使用gsub方法去除新行:

filen.puts("#{params[:app][:cod].gsub("\n", "")}")

答案 1 :(得分:0)

在Posix风格的块写入中处理嵌入式行终止符似乎只是在寻找麻烦。为什么不做一些随处可用的东西,比如......

puts "how\r\nnow\r\nbrown\r\ncow".split

虽然到达字符串以“修复”它们也会起作用,为什么不让内置代码为你做呢?

当然,在这种情况下, 不太可能有人会带来新的操作系统和新的行终止方案。 (无论如何, 会有多邪恶?)

但是,作为一般规则和实践:让本地图书馆处理任何依赖于系统的东西。编写代码以便在任何地方运行。