RE: Как загрузить текстовый файл без разделителей в ТаблицуЗначений 1С?

#33866
bot_avaOdin — Одинэсник
Участник

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

    1C
    Функция ЗагрузитьТаблицуИзФайла(ИмяФайла) Экспорт
        // Создаем таблицу значений с нужными колонками
        Таблица = Новый ТаблицаЗначений;
        Таблица.Колонки.Добавить("НаименованиеМЦ", Новый ОписаниеТипов("Строка", 100));
        Таблица.Колонки.Добавить("ГруппаТовара", Новый ОписаниеТипов("Строка", 100));
        Таблица.Колонки.Добавить("КодГруппы", Новый ОписаниеТипов("Строка", 20));
        Таблица.Колонки.Добавить("НоменНомер", Новый ОписаниеТипов("Строка", 20));
        Таблица.Колонки.Добавить("ОКДП", Новый ОписаниеТипов("Строка", 20));
        Таблица.Колонки.Добавить("УчетнЕдиница", Новый ОписаниеТипов("Строка", 20));
        
        // Открываем файл для чтения
        Поток = Новый ТекстовыйДокумент;
        Поток.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
        
        // Пропускаем заголовок (первую строку)
        Строки = Поток.Строки;
        Если Строки.Количество() < 2 Тогда
            Возврат Таблица; // Нет данных
        КонецЕсли;
        
        Для НомерСтроки = 2 По Строки.Количество() Цикл
            Строка = Строки[НомерСтроки];
            
            // Разбор строки по фиксированным позициям (примерные позиции, подкорректируйте под ваш файл)
            // В вашем примере:
            // Наименование МЦ: с 1 по 30 символ
            // Группа товара: с 31 по 60 символ
            // Код группы: с 61 по 66 символ
            // Номен.номер: с 67 по 73 символ
            // ОКДП: с 74 по 83 символ
            // Учетн.единица: с 84 по конец строки
            
            НоваяСтрока = Таблица.Добавить();
            НоваяСтрока.НаименованиеМЦ = СтрЗаменить(СокрЛП(Сред(Строка, 1, 30)), "  ", " ");
            НоваяСтрока.ГруппаТовара = СокрЛП(Сред(Строка, 31, 30));
            НоваяСтрока.КодГруппы = СокрЛП(Сред(Строка, 61, 6));
            НоваяСтрока.НоменНомер = СокрЛП(Сред(Строка, 67, 7));
            НоваяСтрока.ОКДП = СокрЛП(Сред(Строка, 74, 10));
            НоваяСтрока.УчетнЕдиница = СокрЛП(Сред(Строка, 84));
        КонецЦикла;
        
        Возврат Таблица;
    КонецФункции
    

    Объяснение:
    — Используем фиксированные позиции для полей, так как в файле нет разделителей.
    — Функция `СокрЛП` убирает лишние пробелы слева и справа.
    — Первая строка файла — заголовок, пропускаем.
    — Позиции и длины полей нужно подкорректировать под реальный формат вашего файла, здесь примерные.

    Если нужно, могу помочь с уточнением позиций по вашему файлу.

    Рекомендую посмотреть здесь: https://infostart.ru/public/1695607/ (пример работы с табличными документами и текстовыми файлами с фиксированной шириной полей).

    База знаний 1С