2016-11-04 39 views
0

所以我得到了與下面的文本文件:寫入文件打破

[[[[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]]] 

,我需要打破每第四個數字後的線,所以它看起來是這樣的:

[[[[[1, 2], [3, 4]], 
[[1, 2], [3, 4]], 
[[1, 2], [3, 4]], 
[[1, 2], [3, 4]], 
[[1, 2], [3, 4]]]]] 

我可以將文件加載到新陣列,使其爲一個字符串,然後使用:

.delete("[]").delete(" ").split(",").map(&:to_i) 

及用途:

.each_slice(4) { |a| p a } 

獲得:

[1, 2, 3, 4] 
[1, 2, 3, 4] 
[1, 2, 3, 4] 
[1, 2, 3, 4] 

但我不知道,如何將這些行寫回文件,用換行符。我需要將該文件加載到另一個程序中,該程序會刪除每個括號,以便上面的輸出正常工作。

有沒有辦法用「\ n」來解決它? PS:這是我在本網站爲我的項目創建這麼多幫助之後的第一篇文章。

+0

' f.puts「anything」' – 7stud

+0

這對我不起作用,因爲我需要在文件中每第四個數字之後換行。答案在每個數字之後給我一個換行符。 – Doodles

回答

1

假設你不關心從輸入數組的嵌套,你可以做到以下幾點:

arr = [[[[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]]] 
puts arr.flatten.each_slice(4).map(&:to_s).join("\n") 
#=> [1, 2, 3, 4] 
    [1, 2, 3, 4] 
    [1, 2, 3, 4] 
    [1, 2, 3, 4] 
    [1, 2, 3, 4] 

`

+0

不錯!那工作:) – Doodles

0
data = [ 
    '[1, 2]', 
    '[1, 2]', 
    '[1, 2]', 
] 

File.open('output.txt', 'w') do |f| 
    data.each do |string| 
    f.puts string 
    end 
end 

$ cat output.txt 
[1, 2] 
[1, 2] 
[1, 2] 
+0

這不適合我,輸出就像上面的答案。 – Doodles

+0

儘管此代碼片段可能會解決問題,但它並不能解釋爲什麼或如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **舉報人/評論者:** [僅限代碼解答,例如downvote,請勿刪除!](// meta.stackoverflow.com/a/260413/2747593) –

0

另一種方法是:

arr = [[[[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]]] 

> arr.flatten(2).each { |string| p sting.flatten } 
# => [1, 2, 3, 4] 
# [1, 2, 3, 4] 
# [1, 2, 3, 4] 
# [1, 2, 3, 4] 
# [1, 2, 3, 4]