helpf.pro
Регистрация
 0 
Распечатать

Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке 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");
	
	//Но нужно получить файл UTF8 без сигнатуры BOM
	 Данные = Новый ДвоичныеДанные(ТекФайл);
    Строка64=Base64Строка(Данные);
    Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
    ДанныеНаЗапись=Base64Значение(Строка64);
    ДанныеНаЗапись.Записать(ТекФайл); // записываем
КонецПроцедуры

//// Вспомогательное
&НаКлиенте
Функция РазложитьСтрокуВМассив(Знач Стр, Разделитель = ",") Экспорт 	
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр,Поз-1));
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр,Поз-1));
			Стр = Сред(Стр,Поз+ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;   	
КонецФункции   

Внешний вид обработки получился таким:

Обработка написана для Web-Студии W1C : Первый Веб-Консультант

Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 10998
 0 
Распечатать
Возможно, вас также заинтересует
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
PostgreSQL: установка, настройка, обслуживание 12
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать архив. Создание объекта За
Авто добавление обработки в справочник Внешних обработок 0
Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автома
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!