2010-06-10 31 views
1

我想寫一個ruby字符串到一個文件,使嵌入字符串的任何換行符保持嵌入。這被寫入一個文件,然後由另一個工具處理。ruby​​寫新行字符到文件,但不解釋爲真正的換行

一個例子如下。

I want this: 1 [label="this is a\ntest"] \n (second \n is a true newline) 
I have tried this: string = '1 [label="this is a\ntest"]' + "\n" 

有什麼想法?

+0

有什麼不符合你的方式嗎? – 2010-06-10 14:00:17

+0

上述示例中的第一個換行符被下游處理工具讀​​爲真正的換行符。如果我在文本編輯器中打開,也是如此。但是,如果我進入文本編輯器並輸入\ n,它將保留爲文本...不是換行符。以某種方式想逃避整個換行符。 – thomas 2010-06-10 14:07:07

回答

2

我想通了。我正在使用rails word_wrap幫助函數來包裝文本,並使用「\ n」而不是「\ n」。我複製了該函數並編寫了自己的函數。

現在很好走。

0

上述示例中的第一個換行符被下游處理工具讀​​爲真實換行符。

這聽起來像是你的問題,然後。您的處理工具正在採用文字重擊(又名\ x5c \ x6e)並將其翻譯爲單個\ x0a)。

換句話說,你的輸出過程很好 - 這是你的輸入過程是不安全的。你可以這樣檢查你的字符串:

string.split(//).map {|x| x[0].ord.to_s(16)} 

你會注意到那裏只有一個「a」在最後。

1

在Ruby中,單引號不能解釋轉義序列。您可以使用引號運算符:

string = %Q/1 [label="this is a\\ntest"] \n/ 

%Q之後的字符是字符串的開始,結束分隔符。 ruby智能地使用具有開放關係的配對字符。例如

string = %Q{1 [label="this is a\\ntest"] \n} 
string = %Q(1 [label="this is a\\ntest"] \n) 
string = %Q!1 [label="this is a\\ntest"] \n! 

這可以讓你選擇一個方便的分隔符不需要額外的轉義爲特定的字符串文字。

相關問題