Работа с внешними текстовыми файлами — это стандартная задача для разработчика 1С. Часто исходные данные приходят в неформатированном виде, где присутствуют лишние заголовки, ненужные колонки или разделители, которые мешают дальнейшему анализу. В этой статье мы разберем, как грамотно считать текст, очистить его от мусорных данных и привести к удобному табличному виду.
Первым делом нам необходимо получить доступ к данным. Самый простой и эффективный способ — считать весь текстовый документ в переменную, а затем разбить её на массив строк. Для этого мы используем функцию СтрРазделить.
Рассмотрим, как разделить текст по символам переноса строки и удалить столбец A, который нам не нужен в итоговой печатной форме:
// Считываем текст из файла
Текст = ПрочитатьТекстИзФайла();
// Разделяем текст на массив строк
МассивСтрок = СтрРазделить(Текст, Символ(13) + Символ(10), Ложь);
Для Сч = 0 По МассивСтрок.Количество() - 1 Цикл
// Разделяем строку на слова, используя пробел как разделитель
МассивСлов = СтрРазделить(МассивСтрок[Сч], " ", Ложь);
// Удаляем второй элемент массива (индекс 1 соответствует второму столбцу)
Если МассивСлов.Количество() > 1 Тогда
МассивСлов.Удалить(1);
КонецЕсли;
// Соединяем обратно в строку
МассивСтрок[Сч] = СтрСоединить(МассивСлов, " ");
КонецЦикла;
Разберем логику работы этого кода: мы берем каждую строку, разбиваем её на слова и физически удаляем элемент из массива. Это позволяет быстро избавиться от нежелательных данных. Однако, если строки содержат «шапку» (например, «Данные проверены»), нам нужно добавить дополнительное условие фильтрации.
Чтобы отсечь заголовки, не нужно перебирать лишние данные. В цикле обхода массива мы можем добавить проверку на содержимое строки. Например, если нужные нам данные всегда начинаются с процента или числа:
Для Каждого Строка Из МассивСтрок Цикл
// Проверяем, является ли строка содержательной
Если Лев(Строка, 1) = "Д" Тогда // Пропуск заголовка "Данные..."
Продолжить;
КонецЕсли;
// Дальнейшая обработка...
КонецЦикла;
Если в будущем вам потребуется не просто вывести данные на печать, а произвести расчеты (например, посчитать сумму значений в столбце В), работа с массивом строк становится неудобной. Намного профессиональнее будет преобразовать данные в ТаблицаЗначений. Это даст возможность обращаться к данным по именам колонок и выполнять типизацию данных.
Рекомендуемый алгоритм работы:
ТаблицаЗначений.Процент (Строка) и Значение (Число).ТаблицаЗначений обязательно используйте функцию Число() для преобразования строкового значения в числовое, предварительно очистив его от символа "%" с помощью СтрЗаменить().Пример реализации заполнения таблицы:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Процент");
ТЗ.Колонки.Добавить("ЗначениеВ", Новый ОписаниеТипов("Число"));
// Внутри цикла:
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Процент = МассивСлов[0];
СтрокаЧисла = СтрЗаменить(МассивСлов[1], "%", "");
НоваяСтрока.ЗначениеВ = Число(СтрокаЧисла);
Использование ТаблицаЗначений дает нам ряд преимуществ:
ТЗ.Итог("ЗначениеВ") для мгновенного получения суммы по столбцу.Число гарантирует отсутствие ошибок при математических операциях.ТаблицаЗначений.Помните, что при работе с текстовыми файлами важно учитывать возможные «плавающие» разделители (лишние пробелы или табуляции). В таких случаях рекомендуем использовать параметры функции СтрРазделить с флагом Ложь — это поможет игнорировать пустые элементы, возникающие при случайном вводе нескольких пробелов подряд.