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

Как загрузить текст...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

напиши код загрузки в таблицу значений из текстового файла заголовок таблицы:
│ Наименование МЦ │ Группа товара │Код группы│Номен.номер│ ОКДП │Учетн.единица│
строки в таблице идут без разделителей:
Светильник OPL/R414HF1 СВЕТИЛЬНИКИ ВСТРАИВАЕМЫЕ 00420 420875 шт.



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Павел, вот пример кода на 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/ (пример работы с табличными документами и текстовыми файлами с фиксированной шириной полей).



   
ОтветитьЦитата