2013-05-12 93 views
0

的元素结合一些文本行,我有一些文件:红宝石

file1.txt 

[some] "one" 

[like] "two" 

file2.txt 

[some] "test" 

[like] "info" 

,等等。

我需要他们通过平等[] -elements在每个文件结合:

file_output.txt 

[some] "one" "test" 

[like] "two" "info" 

我怎样才能做到这一点使用Ruby?

+0

在不现在用正则表达式,如果你还需要一个 – Senjai 2013-05-12 21:43:51

回答

0
File.write('file_output.txt', 
    %w{file1.txt file2.txt}. 
    flat_map { |f| File.readlines(f) }. 
    map(&:strip).reject(&:empty?). 
    map { |l| l.split(' ',2) }. 
    group_by(&:first). 
    map { |k,v| [k, *v.map(&:last)].join(' ') << "\n" }. 
    join("\n") 
) 
+0

它工作正常,谢谢。 – coldmind 2013-05-13 06:42:59

0
["file1.txt", "file2.txt"] 
.inject({}) do |h, f| 
    File.read(f).scan(/^(\[.+?\])\s+(.*)/).each do |k, v| 
    (h[k] ||= k).concat(" #{v}") 
    end; h 
end.values 
.tap{|a| File.write("file_output.txt", a.join($/*2))} 
+1

'开放的解决方案工作(F,:读)'似乎是一个尴尬的方式说'File.read(F )'。在Ruby 2中,您可以使用['File :: write'](http://www.ruby-doc.org/core-2.0/IO.html#method-c-write)而不是'open(.. 。){| f | f.write}' – dbenhur 2013-05-12 21:58:19

+0

感谢您的信息。 – sawa 2013-05-12 22:16:11