我有一個以特定方式排序的.csv文件。我想通過另一個字段重新排序。您的想法將非常感激。如何重新排序60mb CSV文件
我只需要做一次,而不是多次,所以性能不是太大的問題。
我在想什麼。 如果我只是創建一個對象(Java)來保存每個字段,然後創建這些對象的ArrayList。然後,我將在我想要的字段上訂購ArrayList(我可以基於對象的一個成員對對象的ArrayList進行排序 - 右?),並將此重新排序的ArrayList打印到.csv文件。
我有一個以特定方式排序的.csv文件。我想通過另一個字段重新排序。您的想法將非常感激。如何重新排序60mb CSV文件
我只需要做一次,而不是多次,所以性能不是太大的問題。
我在想什麼。 如果我只是創建一個對象(Java)來保存每個字段,然後創建這些對象的ArrayList。然後,我將在我想要的字段上訂購ArrayList(我可以基於對象的一個成員對對象的ArrayList進行排序 - 右?),並將此重新排序的ArrayList打印到.csv文件。
如果你知道如何使用Vim:http://vim.wikia.com/wiki/Working_with_CSV_files
CSV文件(逗號分隔值) 經常被用來保存 純文本數據的表格。以下是用於處理CSV文件的一些有用的技巧 。 您可以:
- 突出顯示任何列中的所有文本。
- 查看字段(將csv文本轉換爲列或單獨的行)。
- 使用HJKL鍵進行導航,可以按單元格向左,向下,向右,(hjkl 正常工作)。
- 搜索特定列中的文本。
- 按行逐行排序。
- 刪除一列。
- 指定逗號以外的分隔符。
如果你有機會獲得一臺Linux機器,然後使用sort
如上建議。但是,如果它必須是Java,那麼至少要使用現有的庫來解析CSV文件。如果你想正確處理所有的角落案例,這種格式很難解析。我建議像OpenCSV這樣的圖書館。
這段代碼展示瞭如何使用庫(與處理省略所有的錯誤!)
/**
* Sorts a CSV file by a fixed column.
*
* @param col The zero-based column to sort by.
* @param in The input CSV file.
* @param out The output writer to receive the reordered CSV.
*/
public static void sort(final int col, final Reader in, final Writer out)
throws IOException {
final List<String[]> csvContent = new ArrayList<String[]>();
// parse CSV file
final CSVReader reader = new CSVReader(in);
String[] line;
while ((line = reader.readNext()) != null) {
csvContent.add(line);
}
reader.close();
// sort CSV content
Collections.sort(csvContent, new Comparator<String[]>() {
@Override
public int compare(final String[] o1, final String[] o2) {
// adjust here for numeric sort, etc.
return o1[col].compareTo(o2[col]);
}
});
// write sorted content
final CSVWriter writer = new CSVWriter(out);
writer.writeAll(csvContent);
writer.close();
}
您可以調整代碼來處理不同的分隔符,引號字符,數字排序等
我將在單個文件中將所有項目與單個日期和時間相關聯,然後單獨對它們進行排序,然後將它們添加到一起。否則這將持續下去。 – Ankur 2009-08-21 06:01:40