0

アクセスDBを取得してCSVにエクスポートするプログラムを作成しました。すべてがうまく機能しますが、エクスポートされた CSV を取り込むプログラムにはハードコードされた正規表現がいくつかあり、特定のデータ型の異なる形式を処理できません。

日付
: 2015 年 5 月 1 日金曜日 00:00:00 EDT
必要: 2015 年 5 月 1 日 00:00:00

ブール?
これらのフィールドがブール値かどうかは不明ですが、
IS: TRUE または FALSE
NEEDS: 0 または 1

通貨
: 0
必要: $0.00

文字列
IS: 文字列
NEEDS: "文字列"

ドキュメントを読んだ後、この行が飛び出しまし

4

1 に答える 1

0

そのためにはuniVocity-parsers を使用します。

    Writer output = new StringWriter(); // use a FileWriter for your case

    CsvWriterSettings writerSettings = new CsvWriterSettings(); //many options here, check the tutorial

    ObjectRowWriterProcessor writerProcessor = new ObjectRowWriterProcessor(); // handles rows of objects and conversions to String.
    writerSettings.setRowWriterProcessor(writerProcessor);
    writerSettings.setHeaders("A", "B", "C", "D", "E", "F", "G", "H");

    CsvWriter writer = new CsvWriter(output, writerSettings);

    writerProcessor.convertFields(Conversions.toBoolean("0", "1")).add("C", "H"); // will write "0" and "1" instead of "true" and "false" on column "C" and "H"
    writerProcessor.convertFields(Conversions.toDate("M/d/YYYY HH:mm:ss")).add("A", "E");
    writerProcessor.convertFields(Conversions.formatToBigDecimal("$#0.00")).add("B", "D");

    writer.writeHeaders();
    writer.processRecord(new Date(), BigDecimal.TEN, true, new BigDecimal("999.99"), new Date(), "some text here", null, false);
    writer.processRecord(new Date(), BigDecimal.ZERO, false, null, null, null, "more text here", null);
    writer.close();

    System.out.println(output.toString()); //and here is the result

出力は次のようになります。

A,B,C,D,E,F,G,H
7/8/2015 07:09:58,$10.00,0,$999.99,7/8/2015 07:09:58,some text here,,1
7/8/2015 07:09:58,$0.00,1,,,,more text here,

開示:私はこのライブラリの作成者です。オープンソースで無料です (Apache V2.0 ライセンス)。

于 2015-07-07T21:43:38.570 に答える