Анализ CSV в java

У меня такая странная ситуация, когда я должен читать по горизонтали. Поэтому я получаю файл csv, который имеет данные в горизонтальном формате. Как показано ниже:

CompanyName,RunDate,10/27/2010,11/12/2010,11/27/2010,12/13/2010,12/27/2010.... 

Все даты, показанные после RunDate, являются значениями для поля даты выполнения, и я должен обновить это поле для этой компании в своей системе. Значения даты не являются фиксированным числом, они могут быть одно значение от 10 до n. Поэтому мне нужно прочитать все эти значения и обновить в системе. Я пишу это на Java.

8 Solutions collect form web for “Анализ CSV в java”

Строка, split (“,”) вряд ли будет работать.
Он разделяет поля, содержащие встроенные запятые («Foo, Inc.»), хотя они представляют собой одно поле в строке CSV.

Что, если название компании:
Компания, Inc.
или хуже:
Хорошая, быстрая и дешевая еда Джо

Согласно Википедии: ( http://en.wikipedia.org/wiki/Comm-separated_values )

Поля со встроенными запятыми должны быть заключены в символы с двойными кавычками.

  1997,Ford,E350,"Super, luxurious truck" 

Поля со встроенными символами двойной кавычки должны быть заключены в символы двойной кавычки, и каждый из встроенных символов двойной кавычки должен быть представлен парой символов двойной кавычки.

  1997,Ford,E350,"Super ""luxurious"" truck" 

Хуже того, цитируемые поля могут иметь встроенные разрывы строк (новые строки, «\ n»):

Поля со встроенными разрывами строк должны быть заключены в символы двойной кавычки.

  1997,Ford,E350,"Go get one now they are going fast" 

Это демонстрирует проблему с разделяющими запятыми String, split (“,”) :

Линия CSV:

a, b, c, «Company, Inc.», d, e, «Joe’s» «Good, Fast and Cheap» «Food», f, 10/11 / 2010,1 / 1/2011, g, h, я

 // Test String.split(",") against CSV with // embedded commas and embedded double-quotes in // quoted text strings: // // Company names are: // Company, Inc. // Joe's "Good, Fast, and Cheap" Food // // Which should be formatted in a CSV file as: // "Company, Inc." // "Joe's ""Good, Fast, and Cheap"" Food" // // public class TestSplit { public static void TestSplit(String s, String splitchar) { String[] split_s = s.split(splitchar); for (String seg : split_s) { System.out.println(seg); } } public static void main(String[] args) { String csvLine = "a,b,c,\"Company, Inc.\", d," + " e,\"Joe's \"\"Good, Fast," + " and Cheap\"\" Food\", f," + " 10/11/2010,1/1/2011, h, i"; System.out.println("CSV line is:\n" + csvLine + "\n\n"); TestSplit(csvLine, ","); } } 

Производит следующее:

 D:\projects\TestSplit>javac TestSplit.java D:\projects\TestSplit>java TestSplit CSV line is: a,b,c,"Company, Inc.", d, e,"Joe's ""Good, Fast, and Cheap"" Food", f, 10/11/2010,1/1/2011, g, h, i a b c "Company Inc." d e "Joe's ""Good Fast and Cheap"" Food" f 10/11/2010 1/1/2011 g h i D:\projects\TestSplit> 

Если эта строка CSV должна анализироваться как:

 a b c "Company, Inc." d e "Joe's ""Good, Fast, and Cheap"" Food" f 10/11/2010 1/1/2011 g h i 

Как и другие, предлагаемые для разделения и parsingа, вы можете использовать opencsv

Для простых данных разделите их на «,» и проанализируйте их, а также «Использовать список», чтобы добавить все эти значения.

CSV-файл является \n завершенным файлом, в котором каждый столбец может быть разделен либо:

  • Запятая или
  • Вкладки \t

Я предлагаю вам иметь BufferedReader который читает CSV-файл и использует метод readLine() для чтения строки.

Из каждой строки используйте String.split(arg) где arg будет вашей запятой или tab \t чтобы иметь массив столбцов … оттуда вы знаете, что делать.

используйте java.util.Scanner – вы можете вызвать useDelimiter (), чтобы сделать запятую вашим разделителем и прочитать новые токены с next (). Сканер может быть создан непосредственно из вашего файла или строки, считанной из файла.

Безусловно, самая полезная страница, посвященная анализу CSV, я когда-либо находил:

http://secretgeek.net/csv_trouble.asp

В принципе, получите созданную библиотеку, чтобы сделать это за вас, потому что синтаксический анализ csv обманчив.

Вы должны действительно попробовать партизаны univocity, поскольку его парсер CSV имеет множество функций для обработки всех видов угловых случаев (неэкранированные кавычки, смешанные разделители строк, файлы с кодировкой BOM и т. Д.), Который также является одной из самых быстрых библиотек CSV .

Простой пример для анализа файла:

 CsvParserSettings settings = new CsvParserSettings(); //heaps of options here, check the docs CsvParser parser = new CsvParser(settings); //loads everything into memory, simple but can be slow. List allRows = parser.parseAll(new File("/path/to/your.csv")); //parse iterating over each row for(String[] row : parser.iterate(new File("/path/to/your.csv"))){ //process row here } //and many other possibilities: Java bean processing, column selection, format detection, etc. 

Раскрытие информации: Я являюсь автором этой библиотеки. Это бесплатно и бесплатно (лицензия Apache V2.0).

Вы начинаете с чтения всей строки в строку. Затем вы используете функцию String.split (…) для получения всех токенов в строке, где используется разделитель, «,». (или это «\», когда вы используете регулярное выражение?)

Чтобы получить каждое значение по одному, используйте StringTokenizer . Постройте его с помощью StringTokenizer(str, ",") . (Не рекомендуется)

Используйте метод split() classа string, который загружает все токены в массив.

Используйте class DateFormat для анализа каждой даты – в частности DateFormat.parse(String) .

  • Поиск максимального значения в массиве с использованием рекурсии
  • Создавайте простые classы POJO (байт-код) во время выполнения (динамически)
  • Вставить Double в Integer в Java
  • Язык выражений в JSP не работает
  • Как получить объект родительского базового classа super.getClass ()
  • Как работают hashCode () и identityHashCode () на задней панели?
  • Хорошая библиотека алгоритмов графа Java?
  • Комбинаторный «N выбирает R» в Java-математике?
  • Java: сохранение формата изображения JPanel
  • Как напечатать двойное значение без научной нотации с использованием Java?
  • Каковы параметры Xms и Xmx при запуске JVM?
  • Interesting Posts

    Не удается установить драйвер tap с помощью tapinstall.exe для OpenVPN при запуске из файла .bat, но он работает при запуске установщика OpenVPN

    Предназначение камеры Android Сохранение ландшафта изображения при съемке

    Код структуры Entity сначала создает столбец «дискриминатор»

    Неявное ключевое слово перед параметром в анонимной функции в Scala

    Завершение вкладки терминала

    литье массив объектов в массив Integer

    Оптимизация Windows 7 для SSD

    Вычислить факториал сколь угодно большого числа, указав все цифры

    Как я могу подключить Pidgin с помощью Facebook-чата (XMPP)?

    Как получить имя цвета при наличии значения RGB в C #?

    Масштаб (или центр) водяного знака с ffmpeg до того же разрешения, что и выходной файл

    Как маршрутизировать трафик через определенный прокси-сервер SOCKS для каждого приложения?

    Использование настраиваемого хранилища доверия в Java, а также значение по умолчанию

    Как я могу использовать распознавание речи без раздражающего диалога на телефонах Android

    ReactJS: Почему передается исходное состояние компонента prop-анти-шаблон?

    Давайте будем гением компьютера.