Капитально об программе 1С 8.0-8.3-8.4, 7.7

Чтение и запись текстовых файлов в 1С 8

 
 
Целью данной статьи будет изучение алгоритмов работы с текстовыми файлами, TXT и CSV. Очень часто приходится использовать данные форматы для обмена данными между несколькими базами, в том числе и отличными от 1С.
 

Чтение текстового файла

 Открытие текстового файла для чтения описывается конструкцией: 
 
Текст = Новый ЧтениеТекста;
Текст.Открыть(ПолноеИмяФайла);
 
В данной конструкции создается неинициализированный объект ЧтениеТекста, а для инициализации используется метод Открыть(<Имя файла>)
 
Пример:

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
 
        // Вставить содержимое обработчика.
        Перем Стр;
 
        Стр = «»;
 
        //Открываем диалог выбора файла для чтения
        ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ВыборФайла.МножественныйВыбор = Ложь;
        ВыборФайла.Заголовок НСтр(«ru = ‘Выбор файла'»);
        ВыборФайла.Фильтр = НСтр(«ru = ‘Все файлы (*.*)|*.*'»);
 
        Если ВыборФайла.Выбрать()  Тогда
              ПолноеИмяФайла ВыборФайла.ПолноеИмяФайла;
        Иначе
              Возврат;
        КонецЕсли; 
 
        Текст Новый ЧтениеТекста;
        Текст.Открыть(ПолноеИмяФайла); 
 
        Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
                 Стр Текст.ПрочитатьСтроку();
                Сообщить(Стр);
         КонецЦикла;
 
        Текст.Закрыть();
 
КонецПроцедуры

Перебор строк в текстовом документе реализован при помощи функции ПрочитатьСтроку().
После чтения файла не забываем его закрыть функцией Закрыть().
Объект ЧтениеФайлов подходит даже для больших объектов.

Если файл небольшой можно использовать объект ТекстовыйДокумент (пример чтения )

Текст = Новый ТекстовыйДокумент;

ПолноеИмяФайла = «D:\1C\Пример.txt»;
Текст.Прочитать(ПолноеИмяФайла);

КоличествоСтрок = Текст.КоличествоСтрок();
Для Счетчик = 1 по КоличествоСтрок Цикл
    ТекСтрока = Текст.ПолучитьСтроку(Счетчик);
    Сообщить(ТекСтрока);
КонецЦикла;     

Запись текстового файла

 
Запись в текстовый файл происходит приблизительно по тому же сценарию:
 
&НаКлиенте
Процедура ЗаписатьФайл(Команда)
  
        //Открываем диалог выбора файла для записи
        СохранениеФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
        СохранениеФайла.Заголовок НСтр(«ru = ‘Сохранить файл'»);
        СохранениеФайла.Фильтр НСтр(«ru = ‘Все файлы (*.txt)|*.txt'»);
  
        Если СохранениеФайла.Выбрать() Тогда
                  Текст = Новый ЗаписьТекста;
                Текст.Открыть(СохранениеФайла.ПолноеИмяФайла,КодировкаТекста.ANSI);
                Текст.ЗаписатьСтроку(«Программируем в 1С 8.2»);
                Текст.Закрыть();
          КонецЕсли;
  
КонецПроцедуры
 
 
Записать текст в документ можно при помощи функции ЗаписатьСтроку() — в данном случае после записанной строки автоматически добавится разделитель строк и следующая запись начнется с новой строки. Если же необходимо добавить в строку дополнительно текст, то можно воспользоваться функцией без переноса строки — Записать()
 

Запись через «ТекстовыйДокумент»

Пример не содержит проверок на наличие файла, файл перезаписывается. При необходимости добавления используйте метод Прочитать().

Текст = Новый ТекстовыйДокумент;

ПолноеИмяФайла = «D:\1C\150406.txt»;

 
Текст.ДобавитьСтроку(«1»);
Текст.ДобавитьСтроку(«2»);
Текст.Записать();
 

Чтение файла CSV

 
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятая (,) или точка с запятой (;). (Википедия)
 
Такой формат часто используют для выгрузки данных из различных баз отличных от 1С. Ниже представлен алгоритм чтения данного формата на основе обычного чтения текстового файла с анализом строки и разбиением ее на поля.
 
Пример:

&НаКлиенте
ПроцедураПрочитатьЦСВ(Команда)
 
 
        // Вставить содержимое обработчика.
        ПеремСтр,Сч;
 
        Стр = «»;
 
         //Открываем диалог выбора файла для чтения
        ВыборФайла= НовыйДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ВыборФайла.МножественныйВыбор = Ложь;
        ВыборФайла.Заголовок =НСтр(«ru = ‘Выбор файла'»);
        ВыборФайла.Фильтр=НСтр(«ru = ‘Все файлы (*.csv)|*.csv'»);
  
        Если ВыборФайла.Выбрать() Тогда
                ПолноеИмяФайла=ВыборФайла.ПолноеИмяФайла;
        Иначе Возврат;
        КонецЕсли;
  
        Текст =НовыйЧтениеТекста;
        Текст.Открыть(ПолноеИмяФайла);
 
        Сч = 0;
  
        Пока Стр <> Неопределено Цикл
  
                Стр =Текст.ПрочитатьСтроку();
 
                //Создаем массив в который будем добавлять выбранные поля
                МассивПолей НовыйМассив();
  
                //Цикл разбивает строку на подстроки по разделителю «;» и заносит их в массив
                Пока СтрДлина(Стр)> 0 Цикл
  
                       //Находим позицию первого вхождения символа «;»
                       ПозицияРазделителя =Найти(Стр, «;»);
 
                       //Считываем символы до первого найденного символа «;»
                       МассивПолей.Добавить(Лев(Стр,ПозицияРазделителя 1));
 
                       //Удаляем из строки найденную подстроку и повторяем цикл с оставшейся строкой
                       Стр =Прав(Стр,СтрДлина(Стр) —ПозицияРазделителя);
  
                КонецЦикла;
 
                //Выводим на экран первое прочитанное поле
                Попытка Сообщить(МассивПолей[0]); Исключение КонецПопытки;
          КонецЦикла;
  
        Текст.Закрыть();
  
КонецПроцедуры
 

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

Подведем итоги:

Для чтения и записи текстового файла в 1С существуют 3 объекта ЧтениеФайла, ЗаписьФайла, ТекстовыйДокумент.

Последний более универсальный, но медлительный, т.к. считывает файл сразу. Если памяти мало, его использование может вызвать ошибку нехватки памяти. Данный объект является основой для интерфейсного объекта «ПолеТекстовогоДокумента»

Возможно использовать данные функции для чтения/записи HTML и log файлов.

Для работы с XML (хотя они тоже текстовые) рекомендуется использовать специализированные объекты ЧтениеXML, ЗаписьXML.