如何重新排序60mb CSV文件

时间:2009-08-21 03:59:18

标签: java arraylist

我有一个以某种方式订购的.csv文件。我想用另一个字段重新排序。非常感谢您的想法。

我只需要做一次,而不是多次,所以性能不是太大的问题。

我在想什么。 如果我只是创建一个对象(java)来保存每个字段,然后创建这些对象的ArrayList。然后我将在我想要的字段上订购ArrayList(我可以根据对象的一个​​成员订购对象的ArrayList - 对吗?),并将这个重新排序的ArrayList打印到.csv文件。

4 个答案:

答案 0 :(得分:9)

Souds喜欢它会起作用,但也有些矫枉过正。如果你有一个unix box或cygwin,你可以做到

cat file | sort -t , +<field number>

这将打破字段,并按字段编号

排序
cat file | sort -t , +2

按第二个字段排序。

答案 1 :(得分:3)

你不能只将csv加载到Excel中,使用sort函数对其重新排序,然后将结果保存为新的csv文件吗?

答案 2 :(得分:3)

如果您有权访问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();
}

您可以调整代码以处理不同的分隔符,引用字符,数字排序等。

答案 3 :(得分:1)

如果您知道如何使用Vim:http://vim.wikia.com/wiki/Working_with_CSV_files

  

CSV文件(逗号分隔值)是   通常用于保存数据表   纯文本。以下是一些有用的   使用CSV文件的技巧。   你可以:

     
      
  • 突出显示任何列中的所有文字。
  •   
  • 查看字段(将csv文本转换为列或单独的行)。
  •   
  • 使用HJKL键导航,向左,向下,向上,向右移动(hjkl   正常工作)。
  •   
  • 搜索特定列中的文本。
  •   
  • 按列对行进行排序。
  •   
  • 删除列。
  •   
  • 指定逗号以外的分隔符。
  •