|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2017, 14:05 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Регулярные выражения (опять, теперь уже в C#)
Здравствуйте.
Задача такая: разбить строку на составляющие, которые имеют следующий формат: "<любой набор символов>" (фрагменты, заключённые в кавычки). Вооружился следующими инструментами: синтаксис регулярных выражений, чем сплитить. Пишу код: Код:
Собственно, регулярки - это моё больное место (как и многое другое =) ), но я потихоньку начинаю вникать. Я конечно же могу пойти другим путём - просто Split("\""), и обработать, но вся эта хрень с регулярками "кидает мне вызов" (с которым я не справляюсь =) ), поэтому пытаюсь хотя бы узнать, как это делать. Помогите пожалста.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 25.10.2017 в 14:08. |
25.10.2017, 14:12 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
25.10.2017, 14:16 | #3 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Нужно разбить на куски, и обработать каждый кусок по отдельности.
Суть в том, что у меня файл формата CSV, и на выходе не должно быть никаких кавычек; в одном из нескольких файлов они таки присутствуют, просто потому что разделитель (точка с запятой) используется в некоторых ячейках; отсюда все мои артефакты и проблемы. Нужно в каждой ячейке в кавычках найти и заменить (Replace) все разделители, что бы все кавычки благополучно удалить без повреждения количества ячеек в каждой строке файла.
Подпись ? Не, не слышал ...
|
25.10.2017, 15:55 | #4 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Нда, файл на 400 000 строк, и такая поячеистая обработка в один поток будет длиться час =) ...
Подпись ? Не, не слышал ...
|
25.10.2017, 16:21 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Насколько помню это с 1С выгрузка. Может проще в dbf выгрузить из таблицы значений или вообще в текстовый файл c фиксированной структурой. Объем увеличится конечно, но обработка упростится.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
25.10.2017, 16:33 | #6 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
У меня помимо собственной выгрузки из 1С (где кстати с форматом всё в порядке) есть ещё десяток таких выгрузок из пойди пойми откуда. И вот попались такие артефакты, при которых мало того что разделители в ячейках, так ещё и не все ячейки взяты в кавычки. Как обрабатывать такие ситуации - я имею очень смутное представление ... Если сначала разбить по разделителям - то я уже сразу получаю дополнительные "столбцы", если же сначала разбивать по кавычкам - я получаю одну ячейку строки, в которой судя по разделителям и по общей массе данных должно быть две или три (ячейки). Подчёркнутое довольно таки сложно алгоритмизировать, и в плане реализации, и в плане оптимизации выполнения. Эксель поступает просто: если есть кавычки - всё грузит по кавычкам, иначе же - по разделителям. Это я вижу, когда открываю подопытный файл в том самом экселе.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 25.10.2017 в 16:42. |
|
25.10.2017, 17:29 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Что значит не все?
Вроде бы обычно так и есть в CSV, кавычки только если в ячейке есть разделитель. https://en.wikipedia.org/wiki/Comma-separated_values Зачем вы боретесь с форматом вместо следования ему?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 25.10.2017 в 17:32. |
25.10.2017, 23:56 | #8 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
У меня один файл, в котором НЕ ВСЕ ячейки таблицы взяты в кавычки. Делаю его не я, а качаю там, где мне сказали качать. На сколько мне известно, формат данных должен быть одинаковым в пределах одного файла (блин, масло маслянное), что бы обрабатывалось нормально. Если нужно использовать разделитель хотя бы в одной ячейке таблицы, то ВСЕ ячейки таблицы должны идти в кавычках (и только после разделяться разделителями). А табуляция для слабаков (это более универсальный символ). Поправьте меня, если я не прав, и объясните пожалуйста, как программа должна воспринимать различие ? Повторю: если сначала делить по разделителям - то при их наличии в "одной ; ячейке" я получаю разбиение ячейки НЕЗАВИСИМО ОТ ТОГО, есть ли кавычки вообще. Если есть кавычки - тогда нужно сначала разбить по кавычкам, отсеять внешние разделители, и дальше работать уже с ячейками; в таком случае - если есть ячейка, которую не взяли в кавычки - это ещё пол беды, будет хвост, который со скрипом запишется как ОДНА ячейка; но если это НЕ ОДНА ячейка (разделители есть, кавычек нет) - как тогда поступать ? Эксель воспринимает это, как одну ячейку. Но взглянув на другие строки можно увидеть, что это не так.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 26.10.2017 в 00:23. |
|
26.10.2017, 00:14 | #9 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Не должен, зачем?
В Экселе работает нормально. Ну и с CSV основная сложность, что не все программы придерживаются одного стандарта.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
26.10.2017, 00:23 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Такая может регулярка нужна?
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Опять регулярные выражения | polin11 | Общие вопросы C/C++ | 4 | 09.08.2017 09:05 |
Опять регулярные выражения | polin11 | Python | 1 | 07.08.2017 06:29 |
И опять Dispather Famework, теперь с cms. Оцените :) | dem66 | PHP | 24 | 26.04.2012 21:12 |
Опять авторизация, но теперь сессии | Che Guevara | PHP | 5 | 29.11.2010 12:55 |
Опять сумма. Теперь при условии | jungo | Microsoft Office Excel | 11 | 07.05.2008 09:38 |