5

Super CSV を使用していますが、素晴らしいパッケージのようです。

私の唯一の心配は、名前にスペースを含む列を操作する方法です。いいえ、戻って自分でスペースを削除することはできません。これらのファイルは何百個も提供されますが、各ファイルの 60 列すべてを修正する時間はありません。また、他のすべての人が適切に修正することを信頼できません。

タイトルにスペースを含む列 (つまり、"FirstName" または "firstName" ではなく "First Name") を操作するにはどうすればよいですか?

ありがとう!

コーディング サンプルについては、こちらを参照してください: http://supercsv.sourceforge.net/codeExamples_general.html

4

4 に答える 4

5

リンク先のサンプルに次の行があります。

final String[] header = inFile.getCSVHeader(true);

これで列名がわかるはずですよね?

http://supercsv.sourceforge.net/javadoc/index.html

私は今あなたの質問を理解していると思います。関数に渡される String[] 引数は、read読み込みたいクラスのプロパティ名を取ります。これは定位置であるため、ヘッダーのような名前を付ける必要はありません。したがって、たとえば、 を持つことができますがString[] header = inFile.getCSVHeader()、 のマッピングを持つことができheaderName->propertyNameます。つまり、ヘッダー フィールドが次の場合:

First Name, Last Name, Age

でもあなたのクラスは

getFirstName(), setFirstName(...);
getLastName(), setLastName(...);
getYears(), setYears();

ヘッダーのようにreadメソッドではなくに渡しますが、配列を に渡します。(String[]) {"First Name", "Last Name", "Age"}read(String[]) {"FirstName", "LastName", "Years"}

于 2010-06-29T13:09:19.243 に答える
3

ヘッダーにスペースを入れるには、Bean マッピングとヘッダー配列を分離します。

private final String[] header = new String[] { "First Name", "Last Name"}; private final String[] dataMapping = new String[] { "firstName", "lastName"}; beanWriter = new CsvBeanWriter(new FileWriter(path), CsvPreference.EXCEL_PREFERENCE); beanWriter.writeHeader(header); beanWriter.write(yourPojo, dataMapping, processors);

于 2015-09-04T04:18:28.953 に答える
2

CSV ヘッダーを別の名前でマップする場合は、ハッシュ マップを作成し、これを内部実装に使用できます。たとえば、「First Name」を「firstName」にマップし、内部名に基づいて Bean を設定できます。

于 2010-06-29T13:19:17.787 に答える
1

これはかなり古い投稿だと思いますが、他の人は別の簡単な解決策を探しているかもしれません. これは、スペースを含まない英数字のヘッダー名のみを持つようにするために行ったことです。

  final String[] header = beanReader.getHeader(true);

  for(int i = 0; i <= header.length -1 ; i++ ) {
    header[i] = header[i].replaceAll("[^a-zA-Z0-9]+","");
  }
于 2013-03-01T01:52:13.903 に答える