0

特定の方法で並べ替えられた.csvファイルがあります。別のフィールドで並べ替えたい。あなたのアイデアをいただければ幸いです。

これを複数回行うのではなく、1回だけ行う必要があるため、パフォーマンスはそれほど問題にはなりません。

私が考えていること。各フィールドを保持するオブジェクト(java)を作成してから、これらのオブジェクトのArrayListを作成するとします。次に、必要なフィールドでArrayListを並べ替え(オブジェクトの1つのメンバーに基づいてオブジェクトのArrayListを並べ替えることができます-そうですか?)、この並べ替えられたArrayListを.csvファイルに出力します。

4

4 に答える 4

9

それはうまくいくように聞こえますが、やり過ぎでもあります。Unixボックスまたはcygwinをお持ちの場合は、次のことができます

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

これにより、フィールドが で分割され、フィールド番号でソートされます

cat file | sort -t , +2

2 番目のフィールドで並べ替えます。

于 2009-08-21T04:08:18.047 に答える
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();
}

さまざまな区切り文字、引用文字、数値の並べ替えなどを処理するようにコードを調整できます。

于 2009-08-21T04:51:20.127 に答える
3

csv を Excel に読み込み、並べ替え機能を使用して並べ替え、結果を新しい csv ファイルとして保存することはできませんか?

于 2009-08-21T04:03:56.680 に答える
1

Vim の使い方を知っている場合: http://vim.wikia.com/wiki/Working_with_CSV_files

CSV ファイル (コンマ区切り値) は、多くの場合、データのテーブルをプレーン テキストで保存するために使用されます。以下は、CSV ファイルを操作するための便利なテクニックです。あなたはできる:

  • 任意の列のすべてのテキストを強調表示します。
  • フィールドを表示します (csv テキストを列または別の行に変換します)。
  • HJKL キーを使用して、セルごとに左、下、上、右に移動します (hjkl は通常どおり機能します)。
  • 特定の列のテキストを検索します。
  • 列ごとに行を並べ替えます。
  • 列を削除します。
  • コンマ以外の区切り文字を指定してください。
于 2009-08-21T04:38:06.660 に答える