Имя: Пароль:
1C
1C 7.7
v7: Долгое выполнение скрипта, ось ругается
0 Злопчинский
 
25.03.17
23:40
надыбал на просторах то ли мисты, то ли присоседившегося к ней интернета скрипт по перекодировке файла (перекодирую из win-1251 в utf-8)

//********************************************************************************************************************************
//
Процедура ИзменитьКодовуюСтраницуФайла(имяФайла, исходнКодировка, нужнаяКодировка)
    Если ФС.СуществуетФайл(имяФайла) = 0 Тогда
        Сообщить("Файл " + имяФайла + " - не найден! Изменение кодировки отменено.", "!");
        Возврат;
    КонецЕсли;
    ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "VBScript";
    ScrptCtrl.AddCode("
        |Function StrConv(Text,SourceCharset,DestCharset)
        |    Set Stream=CreateObject(""ADODB.Stream"")
        |    Stream.Type=2
        |    Stream.Mode=3
        |    Stream.Open
        |    Stream.Charset=DestCharset
        |    Stream.WriteText Text
        |    Stream.Position=0
        |    Stream.Charset=SourceCharset
        |    StrConv=Stream.ReadText
        |End Function
        |
        |sub ConvertCodepage( fileName, SourceCharset, DestCharset )
        |    set fs = CreateObject(""Scripting.FilesystemObject"")
        |    originalText = fs.openTextFile(fileName,1).readAll()
        |    convertedText = strConv(originalText, SourceCharset, DestCharset )
        |    fs.openTextFile(fileName,2,true).write(convertedText)
        |end sub
        |
        |");
    Module        = ScrptCtrl.Modules("Global");
    CodeObject    = Module.CodeObject;
    CodeObject.ConvertCodepage(имяФайла, исходнКодировка, нужнаяКодировка);
    //ВОЗМОЖНЫЕ ВАРИАНТЫ КОДИРОВОК
    //"UTF-8"
    //"KOI8-R"
    //"Windows-1251"
    //"ISO-8859-5"
КонецПроцедуры //ИзменитьКодовуюСтраницуФайла()

файло мегабайт 15-20

во время работы вываливается окошок типа скрипт долго работает, сделать ему конец или продолжить...

как избежать такого поведения? или какой другой вариант писать в UTF-8
_сразу_ при создании и записи в файл через fso (то есть создать текстовый файл для записи сразу в формате UTF-8) - подскажите, плиз, знатоки скриптов, сейчас так сделано, типа:

    Т = глFSO.CreateTextFile(ИмяФайла, -1, 0); //создать файл, перезаписывая существующий.
    Т.WriteLine("1.Код товара;2.артикул;3.название товара;4.склад;5.дата;6.кол-во продажи;7.прочий расход;8.кол-во поступления;9.в резерве;10.заказано;11.цена продажи;12.выручка;13.цена закупа;14.себестоимость;15.остаток;16.клиент"); //предопределенный формат данных

Спасибо
1 Torquader
 
25.03.17
23:50
ScrptCtrl.Language = "VBScript";
ScrptCtrl.TimeOut=-1;
// должно помочь
2 Злопчинский
 
26.03.17
00:00
... а весь скрипт с обрамлением? я слаб в них...
3 Злопчинский
 
26.03.17
00:01
а.. и после окончания выполненяи долгого скрипта как установку типа TimeOut=-1 вернуть "взад"?
4 Злопчинский
 
26.03.17
00:02
(2) ой, ступил..
типа так
    ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "VBScript";
    ScrptCtrl.TimeOut=-1;
    ScrptCtrl.AddCode("
        |Function StrConv(Text,SourceCharset,DestCharset)..
?
5 vcv
 
26.03.17
11:11
(0) У меня для конвертации строки в UTF8 используется такая функция.

Функция СтрКонвертироватьВUTF8(Ст) Экспорт
    Перем НоваяСт, i, Символ, КодСимвола;
    НоваяСт = "";
    Для i=1 по СтрДлина(Ст) Цикл
        Символ = Сред(Ст,i,1);
        КодСимвола = КодСимв(Символ);
        Если (КодСимвола > 191) и (КодСимвола < 224) Тогда // А - Я
            НоваяСт = НоваяСт + Симв(208)+Симв(КодСимвола-48);
        ИначеЕсли (КодСимвола > 223) и (КодСимвола < 240) Тогда // а - п
            НоваяСт = НоваяСт + Симв(208)+Симв(КодСимвола-48);
        ИначеЕсли (КодСимвола > 239) и (КодСимвола < 256) Тогда // р - я
            НоваяСт = НоваяСт + Симв(209)+Симв(КодСимвола-112);
        //ИначеЕсли (Символ = "ё") или (Символ = "Ё") Тогда
        //    НоваяСт = НоваяСт + Симв(208)+Симв(КодСимвола-39);
        ИначеЕсли Символ = "ё" Тогда
            НоваяСт = НоваяСт + Симв(209)+Симв(145);
        ИначеЕсли Символ = "Ё" Тогда
            НоваяСт = НоваяСт + Симв(208)+Симв(129);
        ИначеЕсли (Символ = "№") Тогда
            НоваяСт = НоваяСт + Симв(226)+Симв(132)+Симв(150);
        Иначе
            НоваяСт = НоваяСт + Символ;
        КонецЕсли;
    КонецЦикла;
    Возврат НоваяСт;
КонецФункции
6 Злопчинский
 
26.03.17
11:49
(5) такая и у меня есть, но вот переделал на скрипт, видимо потому что долго было
7 vcv
 
26.03.17
21:31
(6) Тогда возьми свой скрипт, и скомпилируй. Обычным .NET Framework, который установлен в любой винде. Еще быстрее, наверное, будет.
8 mehfk
 
27.03.17
04:13
(0) Может воспользоваться портом вот этой вещи под винду https://ru.wikipedia.org/wiki/Iconv ?
9 Злопчинский
 
27.03.17
11:11
(8) спасибо, сграбил в запасники.
поставил как (4) - вроде нормально прошло.
10 Fragster
 
гуру
27.03.17
11:14
(9) вообще поставь себе cygwin полный. там тебе и curl и iconv и даже sed с awk
11 Вафель
 
27.03.17
11:15
(5) на 10 мб файлке 1с умрет и будет делать часа 2
12 Fragster
 
гуру
27.03.17
11:15
ну и bash заодно, чтобы выкинуть cmd нафиг
13 Вафель
 
27.03.17
11:15
Хотя в последних 8 есть функция сложить строку из массива. должно помочь
14 Вафель
 
27.03.17
11:16
(12) sed и awk можно отдельно посатавить. достаточно их ехешники скачать