MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
1С: Выгрузка / Загрузка данных посредством текстовых (TXT) файлов
20.07.2012
16:08
Раздел: Компьютер - Windows - 1С - Готовые решения

Для работы с текстовыми документами существуют три типа данных – ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста. Разница двух подходов состоит в способе загрузки документа:

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

ЗаписьТекста и ЧтениеТекста загружают файл построчно.

ПРИМЕР 1:

Запись данных справочника в текстовый файл:

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

// перебор элементов справочника

Выборка = Справочники.Клиенты.Выбрать();

Пока Выборка.Следующий() Цикл

// выводим в файл код и наименование, разделенные

// каким-либо разделителем, например, ‘;’

Текст.ДобавитьСтроку(""+Выборка.Код+";"+Выборка.Наименование);

КонецЦикла;

// запись в текстовый файл

Текст.Записать("C://1.txt");

С помощью типа ЗаписьТекста этот код будет таким:

// файл в формате Unicode

Текст = Новый ЗаписьТекста("C://1.txt", КодировкаТекста.UTF8);

// перебор элементов справочника

Выборка = Справочники.Клиенты.Выбрать();

Пока Выборка.Следующий() Цикл

// выводим в файл код и наименование, разделенные

// каким-либо разделителем, например, ‘;’

Текст.ЗаписатьСтроку(""+Выборка.Код+";"+Выборка.Наименование);

КонецЦикла;

// запись в текстовый файл

Текст.Закрыть();

Чтение данных из текстового файла в справочник:

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

// открытие файла

Текст.Прочитать("C://1.txt");

// перебор строк текстового документа

Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл

// получить строку файла с указанным номером

Стр = Текст.ПолучитьСтроку(НомерСтроки);

// «распарсивание» строки

// ищем позицию символа-разделителя

Позиция = Найти (Стр, ‘;’);

// создаем новый элемент справочника

Спр=Справочники.Клиенты.СоздатьЭлемент();

// в код записывается подстрока от первого символа до позиции

// символа-разделителя

Спр.Код = Сред(Стр,1,Позиция-1);

// за символом-резделителем – наименование клиента

Спр.Наименование = Сред (Стр, Позиция+1);

Спр.Записать();

КонецЦикла;

С помощью типа ЗаписьТекста этот код будет таким:

Код 1C v 8.х

// файл в формате Unicode

Текст = Новый ЧтениеТекста("C://1.txt", КодировкаТекста.UTF8);

// перебор элементов справочника

Стр="";

// пока строки в файле остались

Пока Стр<>Неопределено Цикл

// получить очередную строку файла

Стр = Текст.ПрочитатьСтроку();

// «распарсивание» строки

// ищем позицию символа-разделителя

Позиция = Найти (Стр, ‘;’);

// создаем новый элемент справочника

Спр=Справочники.Клиенты.СоздатьЭлемент();

// в код записывается подстрока от первого символа до позиции

// символа-разделителя

Спр.Код = Число(Сред(Стр,1,Позиция-1));

// за символом-резделителем – наименование клиента

Спр.Наименование = Сред (Стр, Позиция+1);

Спр.Записать();

КонецЦикла;

ПРИМЕР 2:

В строке текста значения реквизитов справочника разделяются символом кавычка. Его можно получить, например, используя функцию Символ(34).

В случае если символ разделителя (в данном случае – кавычка) может встречаться в выгружаемых данных,

перед помещением в строку меняем этот символ на заранее определенную комбинацию символов.

В нашем случае это %квч%.

Код 1C v 8.х

// Выгрузка данных в текстовый файл

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

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Стр = СтрЗаменить(Выборка.Наименование, Символ(34), "%квч%");

Код = Строка(Выборка.Код) + Символ(34);

Текст.ДобавитьСтроку(Код + Стр);

КонецЦикла;

Текст.Записать("c:\temp\text.txt");

//Загрузка данных из текстового файла. При загрузке ориентируемся на используемый разделитель значений (это кавычка).

//После получения значения делаем обратное преобразование для разделителя (при выгрузке

//данных кавычку, встречающуюся в выгружаемых строках, заменяли комбинацией символов %квч%)

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

Текст.Прочитать("c:\temp\text.txt");

Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл

Стр = Текст.ПолучитьСтроку(НомерСтроки);

Позиция = Найти(Стр, Символ(34));

Код = Сред(Стр, 1, Позиция-1);

прНаименование = Сред(Стр, Позиция + 1);

Наименование = СтрЗаменить(прНаименование, "%квч%", Символ(34));

Сообщить(Код + "–" + Наименование);

КонецЦикла;

"В предыдущем примере файл ЗАГРУЖАЛСЯ ПОЛНОСТЬЮ, а в следующем примере ЗАГРУЖАЕТСЯ ПОСТРОЧНО."

"Это позволяет при работе с файлами больших размеров значительно уменьшить время выполнения задачи."

//Запись данных в файл построчно

Путь = "c:\temp\text.txt";

Текст = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8);

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Текст.ЗаписатьСтроку(Выборка.Наименование);

КонецЦикла;

Текст.Закрыть();

//Чтение данных из файла построчно

Путь = "c:\temp\text.txt";

Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8);

Стр = Текст.ПрочитатьСтроку();

Пока Стр <> Неопределено Цикл

Стр = Текст.ПрочитатьСтроку();

Сообщить(Стр);

КонецЦикла;

Код 1C v 7.x

//Выгрузка данных в TXT файл

Данные = СоздатьОбъект("Текст");

Данные.КодоваяСтраница(0); // принудительная установка

НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма

ТЗ.ВыбратьСтроки();

Пока ТЗ.ПолучитьСтроку()=1 Цикл

Стр = ""+ТЗ.ЭтоГруппа+";"+ТЗ.Уровень+";"+ ТЗ.КодРодителя+";"+ТЗ.Код+";"+ТЗ.Наименование; // Символ - разделитель полей - ";"

Данные.ДобавитьСтроку(Стр);

КонецЦикла;

Данные.Записать("c:\export.txt");

КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма

// Рассчитываем продолжительность выполнения алгоритма в секундах

Длительность = Окр((КонВремя-НачВремя)/1000,3);

Сообщить("Время выгрузки в TXT файл: "+Длительность+" с");

//Загрузка, чтение данных из TXT файла:

НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма

Данные = СоздатьОбъект("Текст");

Данные.КодоваяСтраница(0); // принудительная установка

Данные.Открыть("c:\export.txt");

КолСтр = Данные.КоличествоСтрок();

Для н=1 по КолСтр Цикл

ТекСтр = Данные.ПолучитьСтроку(н);

Состояние("В файле прочитано строк "+н+" из "+КолСтр);

КонецЦикла;

КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма

// Рассчитываем продолжительность выполнения алгоритма в секундах

Длительность = Окр((КонВремя-НачВремя)/1000,3);

Сообщить("Время чтения TXT файла: "+Длительность+" с");

Разместил: E_Migachev Для версии: 7.x 8.x Дата: 30.12.09 Прочитано: 13967

Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования