|
|||||||
1С: Выгрузка / Загрузка данных посредством текстовых (TXT) файлов
Время создания: 20.07.2012 16:08
Раздел: Компьютер - Windows - 1С - Готовые решения
Запись: xintrea/mytetra_syncro/master/base/1342786138soiptj7cj1/text.html на raw.github.com
|
|||||||
|
|||||||
Для работы с текстовыми документами существуют три типа данных – ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста. Разница двух подходов состоит в способе загрузки документа: ТекстовыйДокумент загружает файл целиком и далее построчно обрабатывает его; ЗаписьТекста и ЧтениеТекста загружают файл построчно. ПРИМЕР 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 |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|