2016-11-04 36 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]