Как программно обработать текстовый файл и удалить лишние столбцы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Этап 1: Разделение текста на строки и очистка от ненужных данных

Первым делом нам необходимо получить доступ к данным. Самый простой и эффективный способ — считать весь текстовый документ в переменную, а затем разбить её на массив строк. Для этого мы используем функцию СтрРазделить.

Рассмотрим, как разделить текст по символам переноса строки и удалить столбец A, который нам не нужен в итоговой печатной форме:


// Считываем текст из файла
Текст = ПрочитатьТекстИзФайла(); 

// Разделяем текст на массив строк
МассивСтрок = СтрРазделить(Текст, Символ(13) + Символ(10), Ложь);

Для Сч = 0 По МассивСтрок.Количество() - 1 Цикл
    // Разделяем строку на слова, используя пробел как разделитель
    МассивСлов = СтрРазделить(МассивСтрок[Сч], " ", Ложь);
    
    // Удаляем второй элемент массива (индекс 1 соответствует второму столбцу)
    Если МассивСлов.Количество() > 1 Тогда
        МассивСлов.Удалить(1);
    КонецЕсли;
    
    // Соединяем обратно в строку
    МассивСтрок[Сч] = СтрСоединить(МассивСлов, " ");
КонецЦикла;

Разберем логику работы этого кода: мы берем каждую строку, разбиваем её на слова и физически удаляем элемент из массива. Это позволяет быстро избавиться от нежелательных данных. Однако, если строки содержат «шапку» (например, «Данные проверены»), нам нужно добавить дополнительное условие фильтрации.

Этап 2: Фильтрация строк

Чтобы отсечь заголовки, не нужно перебирать лишние данные. В цикле обхода массива мы можем добавить проверку на содержимое строки. Например, если нужные нам данные всегда начинаются с процента или числа:


Для Каждого Строка Из МассивСтрок Цикл
    // Проверяем, является ли строка содержательной
    Если Лев(Строка, 1) = "Д" Тогда // Пропуск заголовка "Данные..."
        Продолжить;
    КонецЕсли;
    
    // Дальнейшая обработка...
КонецЦикла;

Этап 3: Преобразование данных в Таблицу Значений

Если в будущем вам потребуется не просто вывести данные на печать, а произвести расчеты (например, посчитать сумму значений в столбце В), работа с массивом строк становится неудобной. Намного профессиональнее будет преобразовать данные в ТаблицаЗначений. Это даст возможность обращаться к данным по именам колонок и выполнять типизацию данных.

Рекомендуемый алгоритм работы:

  1. Создайте объект ТаблицаЗначений.
  2. Добавьте колонки, соответствующие вашим данным: Процент (Строка) и Значение (Число).
  3. В цикле при добавлении строки в ТаблицаЗначений обязательно используйте функцию Число() для преобразования строкового значения в числовое, предварительно очистив его от символа "%" с помощью СтрЗаменить().

Пример реализации заполнения таблицы:


ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Процент");
ТЗ.Колонки.Добавить("ЗначениеВ", Новый ОписаниеТипов("Число"));

// Внутри цикла:
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Процент = МассивСлов[0];
СтрокаЧисла = СтрЗаменить(МассивСлов[1], "%", "");
НоваяСтрока.ЗначениеВ = Число(СтрокаЧисла);

Почему это лучший способ?

Использование ТаблицаЗначений дает нам ряд преимуществ:

Помните, что при работе с текстовыми файлами важно учитывать возможные «плавающие» разделители (лишние пробелы или табуляции). В таких случаях рекомендуем использовать параметры функции СтрРазделить с флагом Ложь — это поможет игнорировать пустые элементы, возникающие при случайном вводе нескольких пробелов подряд.

← На главную