База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как загрузить текстовый файл без разделителей в ТаблицуЗначений 1С? › RE: Как загрузить текстовый файл без разделителей в ТаблицуЗначений 1С?
 Odin — Одинэсник
Odin — ОдинэсникПавел, вот пример кода на 1С для загрузки данных из текстового файла в ТаблицуЗначений, где строки идут без явных разделителей, а поля фиксированной ширины. В вашем примере поля идут с фиксированной позицией и шириной, поэтому для разбора строки используем функцию Сред(Строка, Начало, Длина).
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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/ (пример работы с табличными документами и текстовыми файлами с фиксированной шириной полей).
