3

また、読み取りだけでなく、書き込み時にも、長い行を読み取り/簡単な方法で処理できます。

私は調べましopencsvたが、連続した方法で行の要素を参照することはなくsupercsv、名前で列を調べることはできませんが、番号のみを調べることはできません。

名前で列を指定できるようにする必要があるもう 1 つの注意点は、列の数が一定ではなく、列ヘッダーの一部のみが次のように一定であるということです。

Name|Number|Color1|Color2......|Color67|   

1 から 67 までのすべての色が特定の CSV ファイルに存在するわけではありません。

4

3 に答える 3

6

私は実際に opencsv について話すことはできませんが、固定数のフィールドがある場合は、JavaBean バインディングを使用してこのようなことを行うことができるかもしれません

ただし、 Super CSVは、CsvBeanReader、CsvDozerBeanReader、または CsvMapReader (およびそれらに相当する書き込み) を使用した名前による CSV 行の読み取りと書き込みを確実にサポートしています。

物事をシンプルに保ち、(列名をキーとして、列値を値として) マップを使用する場合は、CsvMapReaderを使用できます。Super CSV の Web サイトに、CsvMapReader を使用した読み書きがあります。

読み方の例:

 ICsvMapReader mapReader = new CsvMapReader(
      new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
 try {
  final String[] headers = mapReader.getHeader(true);
  Map<String, String> row;
  while( (row = mapReader.read(headers)) != null) {
    for (String header : headers) {
      System.out.println(header + " is " + row.get(header));
    }
  }
} finally {
  mapReader.close();
}

書き方もよく似ています。

于 2011-07-18T15:16:13.700 に答える
1

CsvReaderにはget()、列を名前で読み取るメソッドがあります。ただし、対応する列は名前付きのCsvWriter列に書き込むことができないため、問題の半分しか解決しない可能性があります。

于 2011-07-18T15:11:34.293 に答える