2016-09-29 5 views
0

.csvファイルを最初にIDでPRICE、次に可能な場合はDATEで一意に並べ替える方法を教えてください。ここでは一例ファイルです:.csvファイルからソートしたものを並べ替える方法

"Date","other","Id","other","Price" 
"01/01/2016","3","6452312546-232","a","4.5" 
"01/03/2016","1","4375623416-345","b","56.25" 
"01/03/2016","6","4375623416-345","c","0" 
"01/03/2016","5","4375623416-345","d","0" 
"02/01/2016","4","6452312546-232","e","34.21" 

は、私は彼らがグループ化されていたら、その後、並べ替え、その後価格で個々のグループを並べ替え、そして、すべてが最初のIDによってグループ化されるように、出力は、最初のIDでソートするには、今すぐグループ内の最新の日付でPRICEソートされたグループ。だから私はこれを出力として得るでしょう:

"Date","other","Id","other","Price" 
"02/01/2016","4","6452312546-232","e","34.21" 
"01/01/2016","3","6452312546-232","a","4.5" 
"01/03/2016","1","4375623416-345","b","56.25" 
"01/03/2016","6","4375623416-345","c","0" 
"01/03/2016","5","4375623416-345","d","0" 

それは明確ですか?そうでない場合は教えてください。

+0

私は[this](http://stackoverflow.com/questions/28942306/sort-row-of-a-csv-file-by-first-value)を試しましたが、エラーが発生します: 'block(2レベル '):' 2行目の不正な引用 'この行はどれですか: 'my_csv = CSV.read' file.csv'' – Forwarding

+0

日付は「日/月/年」ですか? –

+0

@CarySwoveland、私はruby 2.0.0を実行しています。そうですね、それはdd/mm/yyyyです。 – Forwarding

答えて

1

このCSVファイルがメモリに安全にロードできるほど小さいと仮定すると、ファイルをハッシュに読み込んでそこからソートすることができます。

require 'csv' 

table = CSV.read('file.csv', headers: true).map { |row| Hash[row] } 
table.sort_by { |k, _| [k["id"], k["price"].to_f, Date.parse(k["date"])] } 

最初にIDでソートしている場合は、価格と日付フィールドの細分化をさらに下げることになります。

+0

それは私が考えていたものです!しかし、私はハッシュがそれを行うことができるか分からなかった。 – Forwarding

+0

'to_h'を使ってエラーが表示されますが、なぜですか? – Forwarding

+0

'to_h'を実行するとどのようなエラーが表示されますか? – dlachasse

関連する問題