Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке 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 : Первый Веб-Консультант
Категория:
Текстовый документ Как записать текстовый файл в кодировке UTF-8 без сигнатуры BOM Текстовый файл сохраняемый как UTF-8 с сигнатуры BOM в начале имеет 3 байта с значениями: EF, BB, BF. Сигнатура BOM - метка порядка байтов (Byte Order Mark, BOM). Часто, BOM называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). Признак BOM определяет, является ли файл закодированным в UTF-8. Не все программы могут корректно работать с файлами с сигнатуры BOM.
Код 1C v 8.х // Как записать файл в кодировке UTF-8 без BOM
функция ЗаписатьФайлВформате_UTF8_без_BOM (текст,полноеИмяФайла)
// записываем в файл с символами BOM в начале файле
ТекстовыйФайлUTF8_Bom = Новый ТекстовыйДокумент();
ТекстовыйФайлUTF8_Bom.ДобавитьСтроку(текст);
ТекстовыйФайлUTF8_Bom.Записать(полноеИмяФайла,"UTF-8");
// открываем файл и считываем символы после символов BOM
Данные = Новый ДвоичныеДанные(полноеИмяФайла);
Строка64=Base64Строка(Данные);
Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
ДанныеНаЗапись=Base64Значение(Строка64);
ДанныеНаЗапись.Записать(полноеИмяФайла); // записываем
КонецФункции
Категория:
JSON, XML, TXT, CSV, DBF