Re[2]: Разработка регулярного выражения для разбора строки с разделителями
От: masta Россия  
Дата: 06.11.12 07:35
Оценка:
Всем снова доброго дня!

Видимо, я недостаточно полно описал задачу, потому что некоторые советы неприменимы в принципе. Проблема также в том, что на форуме нет подходящего подформума, куда можно было впихнуть эту тему, поэтому я опубликовал её тут. Дело в том, что грузить данные я собираюсь в 1С и есть 2 подходящих мне способов загрузки данных:

Начнём с файла. Итак, преимущества загрузки данных из файла с разделителями такие:

Несомненным плюсом является наличие готовых кодов, которые успешно разбирают строку и заталкивают её в таблицу значений (ТЗ) в 1С. Притом разбор строки выполняется без использования регулярных выражений. Этот код корректно обрабатывает строку любой сложности, напичканную символами-разделителями и кавычками в любом сочетании. Просто супер!
Также плюсом является то, что можно выполнить предварительную обработку данных на листе Excel, удалив с него всякий мусор в виде символов табуляции, неразрывных пробелов и т.п. Это важно, т.к. файлы, которые грузятся в систему, поставляются разными организациями и зачастую содержат приличное количество хлама.
Ещё одним плюсом является то, что при способе загрузки с использованием CSV появляется возможность сбросить форматирование с ячеек листа. Таким образом отпадает необходимость преобразовывать строки вида "2 100,00 руб." в число "2100", которое, по сути, и записано в ячейке, но благодаря стилю форматирования "Денежный" представлено в виде строки "2 100,00 руб."

Минусы у этого способа такие:

Если говорить о возможности использования ADO для решения моей задачи, то меня беспокоят несколько моментов.
1. Зачастую, поставляемые файлы имеют расширение .xls, но не являются в прямом смысле таблицей Excel, а представляют собой текст, отформатированный при помощи разметки HTML. Видимо, поставщику удобнее так делать экспорт. Excel такой файл открывает, глазом не моргнув, а как с ним будет работать ADO? Смогу ли я при использовании ADO загрузить такой файл без дополнительных подпрыгиваний?

2. Зачастую, файлы "косые". То есть, например, в первом столбце данные начинаются с первой строки, а в третьем столбце — с десятой. Как отсутствие данных в столбце будет интерпретировано ADO? Не случиться ли так, что часть данных будет утеряна? При использовании CSV пустые ячейки нормально выгружаются в виде пустых же значений между разделителями.

3. Файлы могут содержать объединения ячеек, как правило, строк. При загрузке из CSV объединённая ячейка утрачивает признак объединения и вместо неё получается одна ячейка со значением и много пустых ячеек. Как такая ситуация будет интерпретирована при использовании ADO?

4. Файл может быть отформатирован совершенно произвольно. Например, с первой по десятую строку в первом столбце стоит дата с использованием соответствующего форматирования, а с 11 строки и далее — число. В каком виде будут загружены данные?

5. Не потребуется ли дополнительного анализа, что за файл загружается, если один из поставщиков предоставил текст в HTML-разметке, присвоив ему расширение xls, второй — классический файл Excel 2003 (xls), третий — файл Excel 2010 (xlsx)? Крайне не хотелось бы городить систему правил для определения того, что это за файл и как его грузить. С CSV таких проблем нет по определению.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.