2016-12-04 60 views
0

比方说,我有一个CSV文件重新排列CSV,删除旧的和重新编写

Name,Age 
john,20 
ana,30 
steven,25 
frank,27 

怎么样,如果我想将它顺序降序根据“时代”的价值,有一些像这

Name,Age 
ana,30 
frank,27 
steven,25 
john,20 

,然后删除所有的CSV行和重写他们根据新的订单?

我知道很热从CSV创建哈希并命令它,但不知道如何实现描述的结果。

+1

http://stackoverflow.com/questions/37786098/ruby-csvtable-sort-in-place#37786671可能有助于 – Schwern

回答

2

Ruby has a CSV library。您可以使用它来读取,分类和编写CSV文件。 CSV类是CSV::Table的包装。 CSV::Table处理数据本身,而CSV主要提供从文件读取的能力。

require 'csv' 
orig_table = CSV.table("test.csv"); 

orig_tableCSV::Table对象。不幸的是,您不能直接对其行进行排序,但可以将它们排序为CSV::Row对象的数组,并将其放入新的CSV::Table中。

sorted_rows = orig_table.sort { |a,b| b[:age] <=> a[:age] } 
sorted_table = CSV::Table.new(sorted_rows) 

然后你就可以得到一个CSV串出的与to_csv并把它写回文件。

File.open("test.csv", "w").write(sorted_table.to_csv) 
+0

似乎即使没有'to_csv'工作。 – steenslag

+0

@steenslag'to_csv'和'to_s'是相同的,所以'to_csv'离开依赖'sorted_table'的默认字符串。 – Schwern