2011-01-06 2 views
4

Мне нужно разобрать файл CSV, который имеет этот заголовок:Понимание этого заголовка 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 

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

ответ

2

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

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

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

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

2

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

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

+0

Запись один за линию ... кажется, что только заголовок довольно «странно» – cdarwin

+0

CSV не имеет «заголовков» только строку. Строки могут содержать заголовок или данные или использоваться для любых других целей. –

+0

Openoffice позволяет мне выбирать разделитель при открытии файла, а точку с запятой можно использовать слишком – cdarwin

1

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

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

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

+0

Я загрузил сам файл, на который я ссылаюсь, и я уверен, что в конце строк заголовка есть символы возврата (^ M) .... Итак, это кажется странным заголовком, что-то вроде заголовок. Запятые - это точки с запятой, поскольку запятые используются внутри текста – cdarwin

1

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

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

+2

[Это CSV] (http://en.wikipedia.org/wiki/Comm-separated_values), разделитель - ';'. Запятая (',') строго не требуется в качестве разделителя и почти всегда будет противоречить десятичным значениям. –

+1

Сепараторы CSV могут быть разными в зависимости от региона. OP - из Германии, а запятая - десятичный разделитель (почти во всей Европе) (что в Великобритании/США), точка с запятой используется как разделитель в CSV. См. Http://en.wikipedia.org/wiki/Comma-separated_values ​​ – Nivas

+0

@Andreas_D, @Nivas - Это что-то новое для меня. Спасибо, парни. Изменили мой ответ, чтобы удалить этот оператор csv. –

3

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

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

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

3

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

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

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

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

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

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

+0

Я высоко оценил ваше предложение об абстрагировании данных, так как это то, что я уже делаю :) – cdarwin

Смежные вопросы