2013-05-12 32 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