2012-05-20 55 views
2

下面的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]}") 

我已檢查了PARAMS:

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' %> 

這裏是與軌道的inpection檢查:

"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> 
+0

好吧,我不明白爲什麼新行被添加。但可以嘗試string.chomp方法。 (params [:app] [:cod] .chomp),並將它傳遞給函數 –

+0

是否使用可視化方法將文件中的「\ r \ n」解釋爲2個新行? –

+0

@mashit剛剛嘗試過,並且還添加了新行 –

回答

0

我用GSUB方法擺脫新線:

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

最初你使用filen.puts或filen.write?因爲當你使用write時,不會添加新行。但在投入的情況下,它會添加一個新線作爲分隔符。所以你會需要gsub或者其他方法來發布你的答案。 –

+0

這是寫。添加新行。然後我用gsub代替put。 –

0

在Posix-與嵌線終結處理風格的塊寫似乎只是在問問題。爲什麼不只是做一些輕便,這將總是工作,就像...

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

雖然伸進串「修理」他們也將工作,爲什麼不讓內置的代碼爲你做?

當然在這種情況下,不太可能有人會配合新的操作系統和新的行終止方案。 (是怎麼回事?)

但是,作爲一般規律和實踐:讓本地圖書館處理任何與系統有關的事情。編寫代碼以在任何地方運行。