|
Парсер CSV
|
|||
---|---|---|---|
#18+
Приветствую! Задача: написать модуль работы с CSV. Т.е. есть DataTable надо организовать функции импорта и экспорта в/из CSV. Пример файла выглядит так (Разделитель запятая) "a b c","x y z" test;test,xxx;xxx "test2,test2","xxx2,xxx2" "test3""test3","xxx3""xxx3" 123,123 таблица Поискав в инете, не нашел достойного примера. Все что то забывают, то двойные кавычки, то перенос строки. Может у кого-то есть готовый паттерн, чтоб велосипед не изобретать. Заранее спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 10:36 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
cherrex_Den, А вы уверены, что это csv? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:13 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Arm79, Да, все по по правилам. https://ru.wikipedia.org/wiki/CSV В частности в локалях, где десятичным разделителем является запятая, в качестве табличного разделителя, как правило, используется точка с запятой. Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка ) обрамляются двойными кавычками ("); Просто пример демонстрирует все "заковыристые" варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:20 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
в CVS перенос строки, это как правило разделить записей. Если у автора перенос строки может быть в значении, значит нужно определить чем будет являться разделитель записей... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:21 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Roman Mejtes значит нужно определить чем будет являться разделитель записей... Нет, если перенос строки в значении, то он обрамляется двойными кавычками, а сепаратор строк так и остается, переносом строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:27 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
cherrex_DenArm79, Да, все по по правилам. https://ru.wikipedia.org/wiki/CSV В частности в локалях, где десятичным разделителем является запятая, в качестве табличного разделителя, как правило, используется точка с запятой. Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка ) обрамляются двойными кавычками ("); Просто пример демонстрирует все "заковыристые" варианты. Этот пример некорректный. CSV - это плоские данные, соответственно, количество полей должно быть одинаково в каждой строке. Во-вторых, в CSV не бывает такого, что в одной строке разделителем является запятая, а во второй - символ табуляции. В третьих, вариаций CSV может быть много, поэтому я бы не закладывался на константу " для экранирования значений. В четвертых, если кавычки открываются, то они должны и закрываться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:29 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Ну и в пятых, что это за CSV, в котором перенос строк является значением? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:30 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
cherrex_Den то он обрамляется двойными кавычками Описался, все значение обрамляется в двойные кавычки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:31 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Arm79Ну и в пятых, что это за CSV, в котором перенос строк является значением? https://www.ietf.org/rfc/rfc4180.txt ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:36 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Изопропил, постоянно по долгу службы приходится работать с этими богомерзкими csv файлами. 1000чи их, даже в тупом Excel для сохранения 100500 вариантов, а для открытия целый визард который определяет, что да как. так что эти стандарты вилами по воде писаны :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 12:52 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Arm79Этот пример некорректный. CSV - это плоские данные, соответственно, количество полей должно быть одинаково в каждой строке. А у меня одинаково. смотрите картинку(скрин) с Excel. Arm79Во-вторых, в CSV не бывает такого, что в одной строке разделителем является запятая, а во второй - символ табуляции. Нет в моем примере табуляции! Arm79В третьих, вариаций CSV может быть много, поэтому я бы не закладывался на константу " для экранирования значений. Есть стандарт, ссылку давал выше. Вот по нему и надо сделать решение. Excel как раз все правильно понимает (см. скрин) Arm79В четвертых, если кавычки открываются, то они должны и закрываться. Это пример! Если я добавлю закрывающую кавычку, от этого что-то измениться? Arm79Ну и в пятых, что это за CSV, в котором перенос строк является значением? "Значение" - это данные. Почему не может быть текстовых значений с переносом строки? Да и стандарт это позволяет. Если бы мне надо было распарсить простой CSV с разделителем - запятая и с строко-разделителем - "перенос строки", я бы это бы сделал за 2-е минуты 3-мя командами. Здесь вся штука в том чтоб обработать "зарезервированные символы" по стандарту. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 13:33 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
ИзопропилArm79Ну и в пятых, что это за CSV, в котором перенос строк является значением? https://www.ietf.org/rfc/rfc4180.txt While there are various specifications and implementations for the CSV format (for ex. [4], [5], [6] and [7]), there is no formal specification in existence, which allows for a wide variety of interpretations of CSV files. This section documents the format that seems to be followed by most implementations: ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 13:36 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Arm79, сделай для себя формальную спецификацию того, что готов принимать на входе (да хоть в БНФ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 13:47 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
ИзопропилArm79, сделай для себя формальную спецификацию того, что готов принимать на входе (да хоть в БНФ) А мне то это зачем? ))) Я пользуюсь мастером импорта-экспорта из поставки MS SQL и доволен. Это ТС нужен какой то велосипед. Если ему нравится Excel, почему бы ему его и не использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 13:49 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Excel правильно не понимает. По крайней мере русскоязычный. Сохрани свой пример в файл test.csv и щелкни по нему мышью. Будет вовсе не так как на скриншотах. Потому что какого-то умника угораздило для русских рег.настроек сделать запятую разделителем целой и дробной частей чисел. В итоге в CSV стало невозможно использовать запятую и в русском CSV разделитель точка с запятой. Вот из-за этой мелкой фигни столько гимора с разбором данных из текстовых файлов. Не только CSV PS Сам напиши. Там конечным автоматом все делается. Тут 17389367 на С делал, можешь за основу взять. Там почти все что тебе надо, только перевод строки считается концом строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 13:55 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
cherrex_Den, CsvHelper справляется и с кавычками, и с переносами строк. В FAQ есть пример работы с DataTable. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 14:04 |
|
Парсер CSV
|
|||
---|---|---|---|
#18+
Нашел очень короткий способ. Парсит все!!! Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2015, 17:13 |
|
|
start [/forum/topic.php?fid=20&fpage=71&tid=1400997]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 324ms |
total: | 502ms |
0 / 0 |