2016-12-04 65 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