我有一个以特定方式排序的.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