Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке UTF8 без BOM Частенько при разработке сайтов приходится обрабатывать тысячи однотипных файлов... чтобы оптимизировать эту рутинную работу я набросал небольшую обработку, которая перебирает в указанном каталоге все файлы с расширением w1c и полностью меняет структуру данного файла, сохраняя его в кодировке UTF8 без BOM сигнатуры
Код обработки файлов:
Код 1C v 8.3 &НаКлиенте
Процедура КомандаОбрW1C(Команда)
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с Файлами" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьККаталогу = ДиалогОткрытия. Каталог;
ВыбранКаталог = НайтиФайлы( ПутьККаталогу, "*.*" ) ;
Для каждого НайденныйФайл Из ВыбранКаталог Цикл
Если НайденныйФайл. ЭтоКаталог( ) Тогда
ИначеЕсли НайденныйФайл. Расширение= ".w1c" Тогда
Сообщить( НайденныйФайл. ПолноеИмя) ;
ОбработатьФайл( НайденныйФайл. ПолноеИмя) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьФайл(ТекФайл)
ОбрФайл = Новый ТекстовыйДокумент;
ОбрФайл. Прочитать( ТекФайл, "UTF-8" ) ;
врТекст = ОбрФайл. ПолучитьТекст( ) ;
врМассив = РазложитьСтрокуВМассив( врТекст, "<&w1c&>" ) ;
новТекст = СокрЛП( врМассив[0 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[1 ]) + "<&w1c&>" + "1<&w1c&>" ;
АтрибутыФайла = Новый Файл( ТекФайл) ;
новТекст = новТекст + Формат( АтрибутыФайла. ПолучитьВремяИзменения( ) , "ДФ=dd/MM/yyyy" ) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[2 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[3 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[4 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[5 ]) + "<&w1c&>" ;
новТекст = новТекст + "no-mods<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[6 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[7 ]) ;
ОбрФайл. Очистить( ) ;
ОбрФайл. УстановитьТекст( новТекст) ;
ОбрФайл. Записать( ТекФайл, "UTF-8" ) ;
Данные = Новый ДвоичныеДанные( ТекФайл) ;
Строка64 = Base64Строка( Данные) ;
Строка64 = Прав( Строка64 , СтрДлина( Строка64 ) - 4 ) ;
ДанныеНаЗапись= Base64Значение( Строка64 ) ;
ДанныеНаЗапись. Записать( ТекФайл) ;
КонецПроцедуры
&НаКлиенте
Функция РазложитьСтрокуВМассив(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Внешний вид обработки получился таким:
Обработка написана для Web-Студии W1C : Первый Веб-Консультант
Категория:
Текстовый документ Как удалить Файл, Каталог? Функция Удаляет указанные файлы.
УдалитьФайлы(<Путь>, <Маска>)
Параметры: <Путь> (обязательный) Тип: Строка. Путь к удаляемым файлам.
<Маска> (необязательный) Тип: Строка. Маска для выбора удаляемых файлов. В строке маски допускается использование символа "*" (звездочка), обозначающего любое число произвольных символов, и "?" (знак вопроса), обозначающего один произвольный символ.
!!! - Если <Маска> не указана, то удаляются все файлы и каталог <Путь>.
Для удаления одного файла, можно передать его полное имя через первый параметр, либо передать путь к нему через первый параметр, а его короткое имя - через второй.
Удаление файлов производится, если в указанных файлах не установлено свойство "Только чтение". В противном случае возникает сообщение об ошибке.
Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Код 1C v 8.х
Попытка
УдалитьФайлы( "C:\temp\Works" ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
Код 1C v 8.2 УП
Попытка
УдалитьФайлы( КаталогВыгрузкиДанных, "*.csv" ) ;
Исключение
#Если Клиент Тогда
Сообщить( ОписаниеОшибки( ) ) ;
#КонецЕсли
КонецПопытки ;
В 7-рке для удаления используется
Код 1C v 7.x ФС. УдалитьКаталог( Стр) ;
ФС. УдалитьФайл( Стр) ;
Как удалить каталог с файлами?
Код 1C v 7.x
Функция Рекурсия(Знач Путь,Сп)
Перем А;
ФСО= СоздатьОбъект( "ФС" ) ;
Стр= ФСО. НайтиПервыйФайл( Путь+ "\*.*" ) ;
Пока ПустоеЗначение( Стр) = 0 Цикл
Если ( Стр< > ".." ) и ( Стр< > "." ) Тогда
Представление= "" ;
Для к= 1 По СтрЧислоВхождений( Путь+ "\" + Стр, "\" ) Цикл
Представление= Представление+ "\" ;
КонецЦикла ;
Сп. ДобавитьЗначение( Путь+ "\" + Стр, Представление+ Стр) ;
ФСО. АтрибутыФайла( Путь+ "\" + Стр, , А) ;
Если Сред( А, 4 , 1 ) = "1" Тогда
Рекурсия( Путь+ "\" + Стр, Сп) ;
КонецЕсли ;
КонецЕсли ;
Стр= ФСО. НайтиСледующийФайл( ) ;
КонецЦикла ;
КонецФункции
Процедура Сформировать()
Перем Каталог, А;
Если ФС. ВыбратьКаталог( Каталог, "" ) = 0 Тогда
Возврат ;
КонецЕсли ;
Сп= СоздатьОбъект( "СписокЗначений" ) ;
Рекурсия( Каталог, Сп) ;
Сп. СортироватьПоПредставлению( 0 ) ;
Для к= 1 По Сп. РазмерСписка( ) Цикл
Стр= Сп. ПолучитьЗначение( к) ;
ФС. АтрибутыФайла( Стр, , А) ;
Если Сред( А, 4 , 1 ) = "1" Тогда
ФС. УдалитьКаталог( Стр) ;
Иначе
ФС. УдалитьФайл( Стр) ;
КонецЕсли ;
КонецЦикла ;
ФС. УстТекКаталог( Каталог+ "\..\" ) ;
ФС. УдалитьКаталог( Каталог) ;
КонецПроцедуры
Категория:
Работа с Файлами и Каталогами Вывод картинки (изображения) на печать, в макет (табличный документ) Код 1C v 8.х
ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект. ПолучитьМакет( "Макет" ) ;
ОбластьКартинки = Макет. ПолучитьОбласть( "ОбластьСКартинкой" ) ;
Картинка = Новый Картинка( ПутьККартинке) ;
ОбластьКартинки. Рисунки. Логотип. Картинка = Картинка;
ТабДок. Вывести( ОбластьКартинки) ;
ТабДок. Показать( ) ;
Область = Макет. ПолучитьОбласть( "Шапка" ) ;
Рисунок = Область. Рисунки. Добавить( ТипРисункаТабличногоДокумента. Картинка) ;
Рисунок. Верх = 5 ;
Рисунок. Высота = 10 ;
Рисунок. Ширина = 10 ;
Рисунок. Лево = 5 ;
Рисунок. Картинка = Новый Картинка( ПутьККартинке) ;
Рисунок. РазмерКартинки = РазмерКартинки. РеальныйРазмер;
ТабДок. Вывести( Область) ;
ОбластьПечатьОрганизации = Макет. ПолучитьОбласть( "ПечатьОрганизации" ) ;
Картинка= Новый Картинка( "C:\files\img\печатьОрганизации.gif" ) ;
ОбластьПечатьОрганизации. Рисунки. Картинка1 . Картинка = картинка;
ТабДок. Вывести( ОбластьПечатьОрганизации) ;
ОбластьПечатьОрганизации = Макет. ПолучитьОбласть( "ПечатьОрганизации" ) ;
КартинкаПечатьОрганизации = ОбластьПечатьОрганизации. Рисунки. Добавить( ТипРисункаТабличногоДокумента. Картинка) ;
КартинкаПечатьОрганизации. Картинка = БиблиотекаКартинок. ОбщаяКартинка1 ;
КартинкаПечатьОрганизации. Верх = 0 ;
КартинкаПечатьОрганизации. Высота = 80 ;
КартинкаПечатьОрганизации. Ширина = 80 ;
КартинкаПечатьОрганизации. Лево = 50 ;
КартинкаПечатьОрганизации. ГраницаСверху = Ложь ;
КартинкаПечатьОрганизации. ГраницаСлева = Ложь ;
КартинкаПечатьОрганизации. ГраницаСправа = Ложь ;
КартинкаПечатьОрганизации. ГраницаСнизу = Ложь ;
КартинкаПечатьОрганизации. РазмерКартинки = РазмерКартинки. АвтоРазмер;
ТабДок. Вывести( ОбластьПечатьОрганизации) ;
Попытка
Путь = КаталогВременныхФайлов( ) + "\1С_Картинка_" + Формат( ТекущаяДата( ) , "ДФ=yyyyMMddЧЧммсс" ) + ".bmp" ;
КартинкаВПамяти = Выборка. Изображение. Получить( ) ;
КартинкаВПамяти. Записать( Путь) ;
ОбластьСостав. Рисунки. D1. Картинка = Новый Картинка( Путь) ;
Исключение
ОбластьСостав. Рисунки. D1. Картинка = Новый Картинка;
КонецПопытки ;
Для
7.7 пример обработки, которая выводит все картинки (.jpg) из выбранного каталога (и подкаталогов) в печатную форму
Скачивать файлы может только зарегистрированный пользователь!
Вот ее код:
Код 1C v 7.x Перем Картинка, ТЗКаталога, ПутьКаталогаРисунков;
Процедура Сформировать1()
Таб = СоздатьОбъект( "Таблица" ) ;
Таб. ИсходнаяТаблица( "Сформировать" ) ;
Картинка = СоздатьОбъект( "Картинка" ) ;
т= 1 ;
ТЗКаталога. ВыбратьСтроки( ) ;
Пока ТЗКаталога. ПолучитьСтроку( ) = 1 Цикл
Картинка. Загрузить( ТЗКаталога. Путь) ;
Сформировать = т;
Таб. ВывестиСекцию( "Заголовок" ) ;
т = т+ 1 ;
КонецЦикла ;
Таб. Опции( 0 , 0 , 0 , 0 ) ;
Таб. Показать( "Сформировать" , "" ) ;
ТЗКаталога = "" ;
КонецПроцедуры
Процедура карт(карт) //Вызывается из объекта картинка на печатной форме
карт. РежимРисования( 3 ) ;
карт. УстановитьКартинку( Картинка) ;
КонецПроцедуры
Процедура СканироватьКаталог(Каталог)
Перем А;
ФСО= СоздатьОбъект( "ФС" ) ;
Ф= ФСО. НайтиПервыйФайл( Каталог+ "*" ) ;
Пока Ф< > "" Цикл
Если ( Ф< > "." ) И ( Ф< > ".." ) Тогда
ФС. АтрибутыФайла( Каталог+ Ф, , А) ;
Если Сред( А, 4 , 1 ) = "1" Тогда
СканироватьКаталог( Каталог+ Ф+ "\" ) ;
Иначе
Если ( Прав( Ф, 4 ) = ".jpg" ) или ( Прав( Ф, 4 ) = ".wmf" ) или ( Прав( Ф, 4 ) = ".emf" ) или ( Прав( Ф, 4 ) = ".ico" ) или ( Прав( Ф, 4 ) = ".bmp" ) или ( Прав( Ф, 4 ) = ".dib" ) или ( Прав( Ф, 4 ) = ".rle" ) Тогда
ТЗКаталога. НоваяСтрока( ) ;
ТЗКаталога. Путь = Каталог+ Ф;
ТЗКаталога. Файл = Ф;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Ф= ФСО. НайтиСледующийФайл( ) ;
КонецЦикла ;
КонецПроцедуры
Процедура Сформировать()
Если ФС. ВыбратьКаталог( ПутьКаталогаРисунков, "Выберете папку с рисунками .jpg..." , 60 ) < > 1 Тогда
Предупреждение( "Рисунки не покажу!" ) ;
Возврат ;
Иначе
ТЗКаталога = СоздатьОбъект( "ТаблицаЗначений" ) ;
ТЗКаталога. НоваяКолонка( "Путь" , , , , , , , ) ;
ТЗКаталога. НоваяКолонка( "Файл" , , , , , , , ) ;
СканироватьКаталог( ПутьКаталогаРисунков+ "\" ) ;
КонецЕсли ;
Сформировать1 ( ) ;
КонецПроцедуры
Категория:
Табличный документ Как Получить Атрибуты файла Код 1C v 8.х ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
ДиалогОткрытияФайла. Выбрать( ) ;
Файл = Новый Файл( ДиалогОткрытияФайла. ПолноеИмяФайла) ;
Текст = "Файл: " + Файл. Имя;
Текст = Текст + Символы. ПС + "Расширение: " + Файл. Расширение;
Текст = Текст + Символы. ПС + "Полное имя: " + Файл. ПолноеИмя;
Текст = Текст + Символы. ПС + "Путь: " + Файл. Путь;
Текст = Текст + Символы. ПС + "Размер: " + Файл. Размер( ) + " байт" ;
Текст = Текст + ? ( Файл. ПолучитьНевидимость( ) , Символы. ПС + "Невидимый. " , "" ) ;
Текст = Текст + ? ( Файл. ПолучитьТолькоЧтение( ) , Символы. ПС + "Только чтение." , "" ) ;
Текст = Текст + Символы. ПС + "Последнее изменение: " + Файл. ПолучитьВремяИзменения( ) ;
Сообщить( Текст) ;
Код 1C v 7.x Сообщить( "ИНФОРМАЦИЯ О ОТКРЫТОМ ФАЙЛЕ!" , "I" ) ;
Сообщить( "Путь к открытому файлу - " + папк + файл) ;
ИмяВыбрФайла= папк+ файл;
ФС. АтрибутыФайла( ИмяВыбрФайла, A, B, C, D, E, F) ;
сообщить( "Размер Файла - " + A) ;
сообщить( "Количество записей - " + НомС + " , Количество полей - " + КолП , "!" ) ;
сообщить( "Время Создания - " + C) ;
сообщить( "Время Последннго Доступа - " + D) ;
сообщить( "Время Последней Записи - " + E) ;
сообщить( "Расширенное Имя Файла - " + F) ;
Категория:
Работа с Файлами и Каталогами