0

これを達成する方法を理解しようとしているRubyの初心者:

次のようなデータを含む .csv ファイルがあります。

D1, Name, Address, Data, Date
D2, 123
D2, 6413
D2, 1207
D1, Name, Address, Data, Date
D2, 789
D1, Name, Address, Data, Date

...等々。

D1行の後のD2行から、それに続くD1行の最後までデータを追加できるようになりましたが、複数のD2行は無視されます。基本的に、各 D1 行に続くすべての D2 行の値を、D1 行の末尾に 1 つの追加フィールドとして追加する必要があります。

4

1 に答える 1

0

ここでは入力として文字列を使用していますが、CSV ファイルでも同じことができるはずです。各行について、最初の要素に D1 が含まれているかどうかを確認します。はいの場合はその行を結果に追加し、そうでない場合は最後の要素を結果の最後の要素に追加します。

string = "D1, Name, Address, Data, Date
D2, 123
D2, 6413
D2, 1207
D1, Name, Address, Data, Date
D2, 789
D1, Name, Address, Data, Date"

lines, result = string.tr(',', '').lines.map(&:split), []
lines.each{|line| line.first['D1'] ? result << line : result.last << line.last }
p result #=> [["D1", "Name", "Address", "Data", "Date", "123", "6413", "1207"], ["D1", "Name", "Address", "Data", "Date", "789"], ["D1", "Name", "Address", "Data", "Date"]]
于 2013-10-23T21:33:36.997 に答える