2015-07-07 4 views
0

У меня есть программа, которая берет мой DB доступа и экспортирует в CSV. Все работает отлично, но программа, которая принимает экспортированный CSV, имеет некоторое жестко закодированное регулярное выражение и не может обрабатывать различные форматы определенных типов данных.Изменение типа данных для Jackcess

Дата
IS: Пт Май 01 00:00:00 EDT 2015
ПОТРЕБНОСТИ: 5/1/2015 00:00:00

булевы?
Не уверен, что, если эти поля являются булево но
IS: ИСТИНА или ЛОЖЬ
ПОТРЕБНОСТИ: 0 или 1

Валюта
IS: 0
ПОТРЕБНОСТИ: $ 0,00

Строки
IS: строка
НУЖДЫ: "строка"

После прочтения документов эта строка выскочила на меня «значения строк - это строго типизированные объекты Java. В Jackcess типы столбцов представлены перечислением Java с именем DataType. " Любая помощь очень ценится

ответ

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).

+0

Отлично, это похоже на то, что я собираюсь. – sneakernetsec

+0

Итак, у меня есть uniVocity tied i n для моего проекта. Мне было интересно, как я могу сделать этот код динамичным. Я знаю, что хочу преобразовать каждое поле, соответствующее критериям, независимо от того, в какой таблице он находится. Поэтому я не могу устанавливатьHeaders и какие столбцы обрабатывать вручную. – sneakernetsec

+0

Должно быть легче, когда [это усовершенствование] (https://github.com/uniVocity/univocity-parsers/issues/37) реализовано. Прямо сейчас вы можете реализовать свой собственный [RowWriterProcessor] (https://github.com/uniVocity/univocity-parsers/blob/master/src/main/java/com/univocity/parsers/common/processor/RowWriterProcessor.java), чтобы проверить класс каждого элемента ввода и соответственно применить преобразования или расширить существующий 'ObjectRowWriterProcessor'. Если вы хотите внести свой вклад в проект, не стесняйтесь подавать запрос на вытягивание. –