Понимание этого заголовка CSV - PullRequest
4 голосов
/ 06 января 2011

Мне нужно проанализировать файл CSV с таким заголовком:

Company;Registered office;Notifying party;Domicile or Registered office;Holdings of voting rights;;;;;;Publication

;;;;directly held;;additionally counted;;total;;in Germany;;in foreign countries

;;;;percentage;single rights;percentage;single rights;percentage;single rights;Official stock exchange

Мне было интересно, является ли это стандартный формат заголовка , потому что я ожидал, чтобы все поля были перечисленыодин за другим, например (в первом ряду) «Владение процентами прав голоса, непосредственно удерживаемых в процентах; владение правами голоса, непосредственно удерживаемыми в правах», в то время как я вижу, что информация разбита на три строки.

В настоящее время мой файл имеет 6 строк заголовка (три показаны и остальные три на другом языке), как я могу определить, если за день они добавят еще несколько строк заголовка ??Файл продолжается следующей строкой (первые данные) и так далее.Первая строка реальных данных не всегда одинакова

BBS Kraftfahrzeugtechnik AG;Schiltach;Baumgartner, Heinrich;Deutschland;62,5;;37,5;;100,0;;Börsenzeitung;04.04.2002

Я также ищу библиотеки Java, которые могут анализировать файлы CSV .

Ответы [ 7 ]

3 голосов
/ 06 января 2011

Я не согласен с теми, кто утверждает, что допускается только запятая. Википедия , например, приводит случай CSV для Германии, в котором для разделения CSV используются точки с запятой (поскольку запятые используются для десятичного разделения) Я думаю, что MS Excel также очень гибок в использовании разделителей. Это просто умы программистов, которые стремятся к наиболее упрощенному случаю.

Для анализа CSV я рекомендую Ostermiller Utils .

Q> как я могу определить, если за день они добавят еще несколько строк заголовка?
A> ты не можешь. Единственное, на что вы можете положиться - это динамический макет (где вы заранее знаете имена столбцов) или статический макет (где вы предполагаете, что этот столбец всегда n-й).

3 голосов
/ 06 января 2011

Несмотря на то, что файлы CSV (Comma Seperated Value) имеют слово запятую в своем имени, я видел некоторые очень странные вещи в корпоративном мире.

Я бы предложил создать собственное представление данных. Похоже, вы читаете в нескольких файлах все по-разному отформатированы?

Я бы подошел к проблеме по модульному принципу. Имейте импортеров для различных форматов, приведите их к нормализованному представлению данных, которое вы сделаете, чем хотите.

Все это предполагает, что эти файлы содержат данные одного типа и что вы не можете контролировать файлы, которые вы получаете.

Даже если это не так, абстрагирование данных от их представления и сохранение их в отдельном проекте было бы полезно.

Я бы также рекомендовал использовать OpenCSV

2 голосов
/ 06 января 2011

Да, у вас есть законный файл CSV. Я успешно прочитал его в Excel и подозреваю, что у меня не будет проблем с OpenOffice. Для Excel я сохранил его как файл .txt, но затем в открывшемся диалоге должен был сказать Excel, что он разделен точками с запятой.

Это "стандарт" в том смысле, что он разделяет столбцы разделителем (точки с запятой в порядке, как и табуляции и, конечно, запятые) и строки новыми строками.

Причина, по которой вы получили этот формат, заключается в том, что вторая и третья строки заголовка не располагаются непосредственно под первой строкой. «Владение избирательными правами» охватывает 6 колонок. Под ним, во второй строке заголовка, «непосредственно удерживается» охватывает 2 столбца, как и «дополнительные подсчитанные» и «итоговые». Третья строка заголовка разбивает вторую строку заголовка на «проценты» и «отдельные права».

Не думаю, что вы легко сможете найти, когда заголовки останавливаются и данные начинаются. Это семантическая проблема - одна из смыслов. Впрочем, человеку легче!

2 голосов
/ 06 января 2011

Это не файл CSV.Вы должны получить спецификацию для этого файла от того, кто его генерирует.

CSV-файлы имеют значения, разделенные запятыми, с одной записью на строку.Это свободная спецификация в отношении того, как экранировать запятые и экранировать символы.В Excel используются двойные кавычки вокруг значений, а затем двойные кавычки.

1 голос
/ 06 января 2011

Что касается библиотек разбора CSV, я настоятельно рекомендую OpenCSV .

Также см .: Можете ли вы порекомендовать библиотеку Java для чтения (и, возможно, записи) файлов CSV?

1 голос
/ 06 января 2011

Что касается заголовков CSV, стандартного формата не существует.Во всех случаях мы предполагаем, что первая строка является заголовком.Несмотря на то, что заголовок занимает несколько строк (что я вижу здесь впервые), вам нужно знать количество столбцов заголовка, прежде чем приступить к синтаксическому анализу этого файла.По крайней мере, это начало.

Следующее предположение в файлах csv обычно состоит в том, что одна строка - это одна строка или запись.Поэтому обычно заголовки и данные разделяются символом новой строки.В вашем случае я не уверен, как вы генерируете файл и как его планируется использовать.

1 голос
/ 06 января 2011

Стандартного формата заголовка не существует. Можно условно считать, что первая строка представляет собой список значений, разделенных запятыми, представляющих заголовки столбцов.

В вашем случае ваша таблица имеет три строки заголовка (мое предположение основано на подсчете ячеек и сравнении с содержанием вашего примера данных).

Это все еще csv, но вы заранее не знаете, какая строка является первой строкой, содержащей фактические данные. Никакой подсказки не дано самим форматом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...