Работа с текстовыми файлами в 1С 8.3

Курс

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

Для работы с текстовыми файлами в 1С предназначен объект ТекстовыйДокумент:

Для добавления строк в конец текстового документа используется метод ДобавитьСтроку. Параметром нужно передать добавляемую строку:

Для записи текстового документа в файл на диск нужно вызвать метод НачатьЗапись и вторым параметром указать путь к файлу:

Пример записи текстового файла с тремя строками:

В результате будет получен следующий файл:

Метод НачатьЗапись является асинхронным и может быть использован только на клиенте. При необходимости первым параметром можно указать описание оповещения с именем процедуры, которая будет вызвана после записи текстового файла:

Есть аналогичный асинхронный метод ЗаписатьАсинх, который использует асинхронность через обещания:

Для записи текстового файла на сервере используется синхронный метод Записать:

С помощью метода УстановитьТекст можно сразу установить весь текст:

Кодировка текстового файла

По умолчанию текстовый файл записывается в кодировке UTF-8. При необходимости кодировку можно изменить, указав в методе НачатьЗапись третий параметр:

Если нужно записать в кодировке UCS-2LE или UCS-2BE, то нужно указать UTF-16LE или UTF-16BE. Это почти что одно и то же.

Список всех возможных кодировок можно посмотреть в синтакс-помощнике.

Кодировку текста можно указать не только строкой, но и с помощью системного перечисления КодировкаТекста:

Возможные значения перечисления:

  • ANSI — в большинстве случае будет windows-1251
  • OEM — OEM 866
  • UTF16 — в большинстве случае будет UTF-16LE
  • UTF8 — UTF-8 с BOM
  • Системная — в большинстве случае будет windows-1251

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

Чтобы прочитать текстовый файл можно воспользоваться методом НачатьЧтение. Первым параметром нужно передать описание оповещения с именем процедуры, которая будет вызвана после прочтения файла, вторым параметром нужно указать путь к файлу.

Для получения текста нужно вызвать метод ПолучитьТекст, который прочитает текстовый файл в одну строку. Так как метод НачатьЧтение является асинхронным, то получать текст нужно в процедуре из описания оповещения. Для этого объект ТекстовыйДокумент передается через параметр описания оповещения:

Кодировка текста определяется автоматически из файла. Если кодировку не получится определить, то будет использоваться кодировка UTF-8. При необходимости можно указать требуемую кодировку третьим параметром:

Есть аналогичный асинхронный метод ПрочитатьАсинх, который вместо описания оповещения использует обещание:

При чтении файла на сервере можно воспользоваться синхронным методом Прочитать:

С помощью метода КоличествоСтрок можно узнать количество строк текстового файла, а методом ПолучитьСтроку, вызываемом в цикле, можно прочитать файл построчно:

Работа со строками текстового документа

Метод ДобавитьСтроку добавляет строку в конец текстового документа. Также есть метод ВставитьСтроку, который позволяет вставить строку в любое место текстового документа. Первым параметром указывается номер строки, вторым — текстовая строка:

В результате будет получен такой текстовый файл:

Если первым параметром указать номер строки, которой еще не существует в текстовом документе, то строка будет просто вставлена в конец документа.

С помощью метода ЗаменитьСтроку можно заменить строку на новую. Первым параметром указывается номер строки, которую нужно заменить. Вторым — новая строка:

С помощью метода УдалитьСтроку можно удалить строку из текстового документа. Параметром нужно указать номер удаляемой строки:

Методом Очистить можно полностью очистить текстовый документ:

Интерактивное редактирование текстового файла

После чтения текстового файла можно открыть его для интерактивного редактирования. Для этого используется метод Показать:

В результате в 1С будет открыт редактор текстового документа:

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

В результате после редактирования текстового документа будет предложено сохранить его:

Если согласиться, то изменения автоматически будут записаны в тот файл, который был указан вторым параметром.

Разделитель строк

В 1С разделителем строк является символ Символы.ПС или LF (Line Feed, Перевод Строки). В Windows в текстовых файлах разделителем является пара символов: CR и LF. CR — Carriage Return, Возврат Каретки. LF — Line Feed, Перевод Строки.

При записи текстового документа средствами платформы 1С символ LF преобразуется в символы CR и LF. При чтении выполняется обратное преобразование CR и LF в LF.

При необходимости преобразования можно переопределить в методах НачатьЗапись и НачатьЧтение:

То есть в методе НачатьЗапись указывается символ, в который будет выполнено преобразование символа LF. А в методе НачатьЧтение указывается символ, который нужно преобразовать в символ LF.

Можно указывать только следующие символы:

  • Символы.ПС (LF)
  • Символы.ВК (CR)

Если нужно использовать CR и LF, то параметр можно не указывать.

Последовательный доступ к файлу

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

Для решения данной проблемы можно использовать объекты последовательного доступа к текстовым файлам: ЗаписьТекста и ЧтениеТекста. Данные объекты загружают в память только определенный фрагмент текста, с которым в данный момент идет работа.

ЗаписьТекста

Для последовательной записи текста используется следующий алгоритм:

  1. Создается объект ЗаписьТекста.
  2. У данного объекта вызывается метод Открыть, первым параметром нужно указать путь к файлу.
  3. Для записи каждой строки вызывается метод ЗаписатьСтроку, которому параметром передается записываемая строка.
  4. Для закрытия текстового файла вызывается метод Закрыть.

В результате будет записан следующий текстовый файл:

Если такого файла на диске еще не было, то он будет создан. Если в файле уже что-то было, то он будет перезаписан.

Можно не использовать метод Открыть, а указать путь к файлу в конструкторе объекта ЗаписьТекста:

Кодировку текста можно указать вторым параметром или в конструкторе объекта ЗаписьТекста или в методе Открыть:

Если кодировка не указана, то используется UTF-8.

Третьим параметром можно переопределить разделитель строк (по умолчанию используется Символы.ПС, LF). Например, можно указать символ процента:

В этом случае текстовый файл будет выглядеть так:

Также разделитель строк можно указать вторым параметром в методе ЗаписатьСтроку:

В этом случае можно использовать разные разделители после записи каждой строки.

Можно вообще не записывать разделитель строк после записанной строки. В этом случае вместо метода ЗаписатьСтроку нужно использовать метод Записать:

В этом случае можно сформировать текст файла отдельно, а потом записать его методом Записать:

Если нужно добавить что-то к уже существующему файлу, то четвертым параметром нужно указать Истина:

В этом случае, если дважды записать в один файл, то будет получен следующий текстовый файл:

ЧтениеТекста

Для последовательного чтения текстового файла используется следующий алгоритм:

  1. Создается объект ЧтениеТекста.
  2. У данного объекта вызывается метод Открыть, первым параметром нужно указать путь к файлу.
  3. Для чтения одной строки вызывается метод ПрочитатьСтроку. Метод вернет текст прочитанной строки. Если метод вернул Неопределено, это значит, что файл закончился. В цикле можно прочитать весь файл построчно.
  4. Для закрытия текстового файла вызывается метод Закрыть.

Можно не использовать метод Открыть, а указать путь к файлу в конструкторе объекта ЧтениеТекста:

При чтении текстового файла платформа пытается сама определить его кодировку. Если не получится, то файл будет прочитан в кодировке ANSI (в большинстве случаев это будет кодировка windows-1251). При необходимости нужную кодировку можно указать вторым параметром:

Третьим параметром можно переопределить разделитель строк (по умолчанию используется Символы.ПС, LF). Например, чтобы прочитать текстовый файл, для которого при записи в качестве разделителя строк использовался символ процента, придется третьим параметром тоже указать символ процента. Иначе метод ПрочитатьСтроку прочитает сразу весь файл:

Также разделитель строк можно указать параметром в методе ПрочитатьСтроку:

В этом случае можно использовать разные разделители для чтения каждой строки.

Можно вообще не использовать разделитель строк, а читать строку определенной длины. Для этого используется метод Прочитать, которому параметром нужно передать размер читаемой строки:

По умолчанию текстовый файл открывается в монопольном режиме. То есть пока он используется платформой 1С, его нельзя отредактировать. Однако, если пятым параметром передать Ложь, то файл будет открыт не в монопольном режиме:

В этом случае, даже пока файл читается платформой 1С, его можно редактировать вручную.

Пример обмена через текстовый файл

Текстовый файл можно использовать для организации обмена между разными системами.

Пример выгрузки документов в текстовый файл:

В результате будет получен следующий файл:

Пример загрузки из текстового файла:

А также вспомогательная функция для преобразования строки в дату:

Данный пример сильно упрощен. Для реального обмена неплохо было бы предусмотреть экранирование точки с запятой внутри наименований контрагентов и номенклатуры. Например, при записи заменять на какую-то последовательность символов, а при чтении выполнять обратную замену.

Изменение кодировки текстового файла

С помощью текстового документа можно изменить кодировку текстового файла. Например, преобразовать из UTF-8 в UTF-16LE:


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok