1

csv ファイルには複数のテーブルが含まれており、次のようになります。

"Vertical Table 1"
,
"id","visits","downloads"
 1, 4324, 23
 2, 664, 42
 3, 73, 44
 4, 914, 8

"Vertical Table 2"
,
"id_of_2nd_tab","visits_of_2nd_tab","downloads_of_2nd_tab"
 1, 524, 3
 2, 564, 52
 3, 63, 84
 4, 814, 8

1 つのテーブルを読み取るには、opencsv の「 HeaderColumnNameTranslateMappingStrategy 」を使用ます。 これにより、以下に示すように、csv テーブル エントリをTableDataBeanオブジェクトのリストにマップできます。

        HeaderColumnNameTranslateMappingStrategy<TableDataBean> strat = new HeaderColumnNameTranslateMappingStrategy<TableDataBean>();

    CSVReader reader = new CSVReader(new FileReader(path), ',');
    strat.setType(TableDataBean.class);
    Map<String, String> map = new HashMap<String, String>();
    map.put("Number of visits", "visits");
    map.put("id", "id");
    map.put("Number of downloads", "downloads");
    strat.setColumnMapping(map);
    CsvToBean<TableDataBean> csv = new CsvToBean<TableDataBean>();
    List<TableDataBean> list = csv.parse(strat, reader);

これは最初のテーブルでは問題なく機能しますが、2 番目のテーブルになると、値と属性が最初のテーブルの同じ属性にマップされます。の出力

for(TableDataBean bean : list){System.out.println(bean.getVisits());}

次のようになります。

 4324
 664
 73
 914
 null
 null
 null
 visits_of_2nd_tab
 524
 564
 63
 814

ファイルを、それぞれが1つのテーブルを含む多くのファイルに分割したくありません。それで、あなたは何を提案しますか?この形式をサポートする他のライブラリはありますか?

4

1 に答える 1

1

私はそれを持っている!リーダーのタイプはCSVReaderでなければならないと思いました。実際、 Readerクラスから継承する任意のオブジェクトをメソッドparseにフィードできることがわかりました。

これで、csv ファイル全体を文字列に読み取って分割し、新しい文字列をそれぞれStringReaderにパックしてから、解析メソッドに渡すことができます。

于 2012-01-29T18:47:36.063 に答える