|
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 можно отдельно посатавить. достаточно их ехешники скачать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |