Пример программирования методом Конечных автоматов на базе написания парсера CSV

17.06.20

Разработка - Математика и алгоритмы

Способ реализации программирования методом Конечного автомата на примере написания парсера CSV-файла с обработкой двойных кавычек и многострочным текстом в ячейках.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Парсер CSV:
.epf 8,02Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Реализуем Конечный автомат Мура на 1С.

Для этого нам надо составить собственно сам автомат, выделив необходимые состояния. Прописать в коде каждого из состояний условия для перехода из одного состояния в другое. А также прописать в коде - ту полезную работу, которую должен выполнять наш автомат в данном состоянии.

Итак, начнем.

Для начала нарисуем примерную диаграмму переходов.

 

 

Собственно сама реализация состоит из следующих шагов:

Инициализируем и создаем все начальные переменные

текПоле="";

...

и т. д.

 

Создаем Макет, куда будем выводить разобранные данные. Создаем его через вызов Функции НаСервере

Макет = ПолучитьПечатнуюФорму();

 

Задаем начальное состояние Автомата

Состояние=0;

Теперь пишем бесконечный цикл, с выходом из него если Состояние автомата станет более 100 (условный уровень завершения)   

Пока Состояние<100 Цикл

...

КонецЦикла;

Внутри цикла прописываем обработку состояний согласно диаграмме переходов. Реализуем просто в виде множественного Если       

 Если Состояние = 0 Тогда
            ВыборкаСтрока = ЧтениеТекста.ПрочитатьСтроку();
            //Сообщить("Начинаем чтение: "+ВыборкаСтрока);
            Если ВыборкаСтрока=Неопределено Тогда
                Состояние = 100; //Весь текст прочитан
            Иначе
                Состояние = 1;   //Парсинг обычной строки
            КонецЕсли;
        ИначеЕсли Состояние = 1 Тогда
            замСтрока = СтрЗаменить(ВыборкаСтрока,"""""","$%*&");
...

        КонецЕсли;

Результат выводим в Табличный документ.

Макет.Показать("Результат");

Добавляем на Форму Поле ввода, и обрабатываем у него событие НачалоВыбора

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Фильтр = "CSV файл (*.csv)|*.csv|";
    Если Диалог.Выбрать() Тогда
        ИмяФайла = Диалог.ПолноеИмяФайла;
    КонецЕсли;
КонецПроцедуры

На этом обработка готова.

Работать должно в любой конфигурации на базе УФ.

В частности, работа обработки была проверена на Базовой ЗУП 3.1.11.133, Платформа 8.3.15.1830

Обработка УФ CSV import

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3205    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7614    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3144    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10927    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4398    RustIG    9    

25

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

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

23.11.2022    3563    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9050    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1747 18.06.20 10:10 Сейчас в теме
(0) Зачем так громоздко?
2. Salimbek 13 18.06.20 16:03 Сейчас в теме
(1) Мне нравится программировать подобным образом. Потому что я в каждый момент времени уверен в том, что выполняет мой код. Я могу легко отследить, как двигался мой алгоритм, какие переходы происходили. Каждый из блоков - небольшой и легко отлаживаемый. Все это, в сумме, дает большое удобство в понимании и дальнейшем обслуживании кода.
В частности - данную обработку я написал больше года назад, но решил выложить только недавно. Посмотрел на код и легко за один день и разобрался, и нарисовал блок-схему, и подготовил описание.
Нашел тему на форуме, из-за чего я начал делать этот парсер: https://forum.mista.ru/topic.php?id=833215
Только Маня по формальному поводу:
не ну это не катит. код заточенный под файл с вагоном перебора и прочего. Я такие клиентам не даю.

отказался платить, и потому я, с чистой совестью, выкладываю эту обработку в общий доступ.
3. Salimbek 13 19.06.20 11:46 Сейчас в теме
И еще к (1) вот альтернативная статья с другой реализацией этого парсинга. https://infostart.ru/public/541555/

Я попробовал разобраться в приведенном там коде и, честно говоря, я бы не сказал, что там реализация понятнее и проще.
Оставьте свое сообщение