Загрузка данных


Функция РаспарситьТекстБилетовНативно(Знач ТекстБилетов) Экспорт
    
    Результат = Новый Массив;
    
    // 1. Очистка от экранирующих кавычек
    ТекстБилетов = СтрЗаменить(ТекстБилетов, """", "");
    
    // 2. Разбиваем текст на строки и склеиваем "разорванные" записи
    МассивСырыхСтрок = СтрРазделить(ТекстБилетов, Символы.ПС, Ложь);
    МассивСтрок = Новый Массив;
    
    // Упаковываем все регулярные выражения в одну структуру
    РегВыражения = Новый Структура;
    РегВыражения.Вставить("Начало",       Новый РегулярноеВыражение("(?i)^(Авиабилет|Электронный|Ж/д|Автобусный|Сверхнормативный|Доплата|а/б)"));
    РегВыражения.Вставить("Тип",          Новый РегулярноеВыражение("(?i)^(Авиабилет|Электронный ж/д билет|Ж/д билет|Автобусный билет|Сверхнормативный багаж[^(]*|Доплата за обмен[^(]*|а/б)"));
    РегВыражения.Вставить("Перевозчик",   Новый РегулярноеВыражение("(?i)\(\s*перевозчик\s*(.*?)(?:,\s*ИНН\s*(\d*))?\s*\)"));
    РегВыражения.Вставить("Класс",        Новый РегулярноеВыражение("(?i)\((Эконом|Купе|Плацкарт|Сидячий)\)"));
    РегВыражения.Вставить("Дата",         Новый РегулярноеВыражение("(?i)(\d{2}\.\d{2}\.\d{4}(?:\/\d{2}\.\d{2}\.\d{4})?)"));
    РегВыражения.Вставить("Пассажир",     Новый РегулярноеВыражение("(?i)\s+([А-Яа-яЁёA-Za-z\-]+\s+[А-Яа-яЁёA-Za-z]+\s+[А-Яа-яЁёA-Za-z]+|[А-Яа-яЁёA-Za-z\-]+\s+[А-Яа-яЁёA-Za-z]\.?\s*[А-Яа-яЁёA-Za-z]\.?\.?)$"));
    РегВыражения.Вставить("НомерМаршрут", Новый РегулярноеВыражение("(?i)^([A-Za-z0-9\s/\.]+?)\s+([А-Яа-яЁёA-Za-z].*)$"));
    
    Для Каждого Стр Из МассивСырыхСтрок Цикл
        СтрОчищ = СокрЛП(Стр);
        Если ПустаяСтрока(СтрОчищ) Тогда 
            Продолжить; 
        КонецЕсли;
        
        Если РегВыражения.Начало.Совпадает(СтрОчищ) Тогда
            МассивСтрок.Добавить(СтрОчищ);
        Иначе
            Если МассивСтрок.Количество() > 0 Тогда
                ИндексПоследней = МассивСтрок.ВГраница();
                МассивСтрок[ИндексПоследней] = МассивСтрок[ИндексПоследней] + " " + СтрОчищ;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    // 3. Вызов отдельной функции парсинга: теперь передаем всего 2 параметра
    Для Каждого СтрокаБилета Из МассивСтрок Цикл
        ДанныеБилета = РаспарситьСтрокуБилета(СтрокаБилета, РегВыражения);
        Результат.Добавить(ДанныеБилета);
    КонецЦикла;
    
    Возврат Результат;

КонецФункции