Разбор строки CSV при помощи RegExp

27.05.10

Разработка - Механизмы платформы 1С

Вроде бы все просто, пока не встретилось что-то наподобие "111;111""";111

Может быть кому и пригодится, в готовом виде я подобного на сайте не нашел

Перем РегВыр;

//*******************************************
Функция глРазложить_CSV(Знач Стр) Экспорт
    Рез = СоздатьОбъект("СписокЗначений");

    Matches = РегВыр.Execute(Стр);
    Для СчетчикЦикла = 0 По Matches.Count()-Цикл
        Match = Matches.Item(СчетчикЦикла);
        Рез.ДобавитьЗначение(Match.Value);
    КонецЦикла;

    Возврат Рез;
КонецФункции

//*******************************************
Процедура ПриОткрытии()
    Попытка
        РегВыр  = СоздатьОбъект("VBScript.RegExp");
        РегВыр.IgnoreCase = 1;
        РегВыр.Global      = 1;
        РегВыр.Multiline  = 1;
        РегВыр.Pattern      = "(""([^""]*|""{2})*""(;|$))|""[^""]*""(;|$)|[^;]+(;|$)|(;)";
    Исключение
        Сообщить("Неудачная попытка создания ""VBScript.RegExp""","!!");
        СтатусВозврата(0);
    КонецПопытки;
КонецПроцедуры

См. также

"Виртуальный" работник на платформе 1C v7.7

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

В статье расписаны примеры из жизни использования "Виртуального" работника. Разобраны вопросы, возникающие при работе с ним.

28.11.2021    1530    user707242_Gold_karas    18    

5

Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы.

Механизмы платформы 1С Платформа 1С v7.7 Абонемент ($m)

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

1 стартмани

06.10.2018    7436    Vortigaunt    5    

11

Особенности разделения объектной модели документа и базы данных в 1С 7.7. Забавный глюк

Механизмы платформы 1С Оперативный учет 7.7 Абонемент ($m)

Когда занимаешься разработкой в среде 1С, редко задумываешься о том, что программным кодом ты работаешь с объектной моделью базы данных, а не с самой базой данных. И что это вообще разные вещи. Ты создаешь объекты: документы и справочники, записываешь их - и в базе данных появляются соответствующие записи. Это настолько привычно, что когда сталкиваешься с нетипичным поведением платформы, первым делом думаешь: надо протестировать базу, она битая. В этой статье я хочу разобрать одну интересную ситуацию, которая как раз демонстрирует такое поведение. Описанная ниже ситуация воспроизводится как в файловом, так и в клиент-серверном (SQL) варианте. Тестировалось на версии платформы 1с77 релиз 027.

1 стартмани

16.05.2018    10110    Vortigaunt    26    

5

Использование классов .Net в 1С для новичков

Механизмы платформы 1С Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    93896    Serginio    116    

188

Все про картинки в 1С 7.7, ну или почти все...

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    43940    95    kitminsk    18    

20

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    23707    tomvlad    5    

14

Динамическая фильтрация в справочнике при вводе наименования

Механизмы платформы 1С Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

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

02.07.2012    18337    maxpiter    62    

15
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alexk-is 6533 27.05.10 06:22 Сейчас в теме
2. Evg-Lylyk 4547 27.05.10 16:12 Сейчас в теме
Гуд работает! я не смог (в свое время) сделать.
Только для строки:
"";;14;121
2-го элемента нет
Еще желательно замерять скорость, а то может встроенным языком быстрее (читаемость регуляра на нуле)

Вот публикации в тему:
Использование регулярных выражений (RegExp) в 1С8.х
Экспорт ТЗ в CSV формат
(1) идея норм. Ссылки по поиску конечно стоило добавить.
3. artbear 1447 03.06.10 16:14 Сейчас в теме
(0) Цикл
Для СчетчикЦикла = 0 По Matches.Count()-1 Цикл
Match = Matches.Item(СчетчикЦикла);
Рез.ДобавитьЗначение(Match.Value);
КонецЦикла;
очень медленный :(
посмотри обсуждение в http://infostart.ru/public/64222/
и мою статью Оптимизация типовых функций из кода 1С
4. Ish_2 1104 03.06.10 17:05 Сейчас в теме
(3) Смотри- ка в январе еще было. А я пропустил.
5. Berrimor 198 03.06.10 18:23 Сейчас в теме
(3) алгоритм для семерки -> без вариантов
6. artbear 1447 04.06.10 13:04 Сейчас в теме
(5) А ты все-таки посмотри :)
у меня универсальный алгоритм, который подойдет и для 7-ки, и для 8-ки.
Один минус - нужна предварительная инициализация алгоритма, а она немного тормозная.
Так что для случая одной строки алгоритм проиграет, а вот если нужно проанализировать кучу строк, тогда выигрыш несомненен.
15. fzt 27.12.12 05:08 Сейчас в теме
(6) artbear,
По моему RegExp у меня подключен почти во всех конфигурациях, которые я так или иначе дорабатывал.
COM объект инициализируется один раз. Поскольку конфигурация в подавляющем большинстве случаев (кроме внешних и внутрненних collback вызовов) однопоточная то его хватает.
7. ot.martina 07.06.10 13:09 Сейчас в теме
А чем плох вариант:
СписокСтроки = СтрЗаменить(СтрокаСписка, ";", Символы.ПС);
Для Н = 1 По СтрЧислоСтрок(СписокСтроки) Цикл
ТекЗначение = СтрПолучитьСтроку(СписокСтроки, Н);
Н = Н + 1;
КонецЕсли;
8. Berrimor 198 09.06.10 09:12 Сейчас в теме
(7) тем что он не разберет конструкцию из анонса
9. ot.martina 15.06.10 18:37 Сейчас в теме
Согласен. Правда, предложенный метод тоже не разберет конструкцию из анонса.
10. Berrimor 198 16.06.10 12:52 Сейчас в теме
(9) анонс мною писан, что я балбес писать то что он не разберет :), будет

111;111""
111

что и нужно
Арчибальд; +1 Ответить
13. ot.martina 21.06.10 14:30 Сейчас в теме
Если Википедия - признаваемый авторитетным ресурс, то и Вам есть смысл с ним ознакомиться, особенно рекомендую завершающую часть:
CSV (от англ. Comma Separated Values — значения, разделённые запятыми) — это текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятая (,) или точка с запятой (;). Используемый символ разделителя зависит от установленной в системе локали. В США это запятая, а в России — точка с запятой, так как запятая используется для дробных чисел (в отличие от США, где это точка). Значения, содержащие зарезервированные символы, такие как: запятая, точка с запятой или новая строка обрамляются символом двойные кавычки ("); если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд. Строки разделяются парой символов CR LF (0x0D 0x0A) (в DOS и Windows эта пара генерируется нажатием клавиши Enter).
То, что Вы пишете в (10) во-первых, не совпадает с результатом вывода 1С (см. (11)), во-вторых, не отвечает условию разбора CSV файла (см. описание использования зарезервированных символов и кавычек).
14. Berrimor 198 22.06.10 12:07 Сейчас в теме
была ситуевина, было решение - бодаться по поводу что есть csv смысла никакого не вижу, с сим всего доброго и желаю (13)
11. ot.martina 16.06.10 14:29 Сейчас в теме
Странно, почему у меня выдает такой текст?
"111;111""";
111
И как определить, что нужно не вот это?
"111
111"""
111
12. Berrimor 198 17.06.10 05:45 Сейчас в теме
(11) по моему Вам есть смысл разобраться с тем как устроен CSV
16. vladnet 360 29.03.21 00:56 Сейчас в теме
Прошло 11 лет, а решения так нормального и не появилось)) Через адо пробовал делать, но не смог пробится через ограничение в 256 символов.
Текущее решение не обрабатывает если в конце регулярного выражения пустое значение

К примеру:

"ааа1";"ббб1";
"ааа2";"ббб2";"ссс3"

Может кто решил такую проблему?
Оставьте свое сообщение