HelpF.pro

Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке 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 : Первый Веб-Консультант


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq83/view/1662.html