Как в 1С обрабатывать длинные строки (4 Мб)
Столкнулся с проблемой, что большие строки в 1С очень долго обрабатываются. Например, вот этот алгоритм ищет все точки запятые в кавычках и заменяет на запятые.
На файле размером 4 Мб работает несколько часов. Кто сталкивался с подобной проблемой?
СтрокаТекстаРезультат = "";
Кавычка = Ложь;
Для НомерСимвола = 1 По СтрДлина(СтрокаТекста) Цикл
ТекСимвол = Сред(СтрокаТекста,НомерСимвола,1);
Если ТекСимвол = """" Тогда
Кавычка = НЕ(Кавычка);
КонецЕсли;
Если ((ТекСимвол = ";") ИЛИ (ТекСимвол = Символы.ПС)) И Кавычка Тогда
ТекСимвол = ",";
КонецЕсли;
СтрокаТекстаРезультат = СтрокаТекстаРезультат + ТекСимвол;
КонецЦикла;
Возврат(СтрокаТекстаРезультат);
ПоказатьНа файле размером 4 Мб работает несколько часов. Кто сталкивался с подобной проблемой?
По теме из базы знаний
- Всякие полезности
- Сравнение 1С8 и Navision
- Нетривиальные подходы в решении всем известных проблем: ускорение «больших» документов в 1С и ускорение поиска по подстроке. Как добиться эффекта в разы?
- Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С (Часть 2)
- Опыт использования 1С: Исполнитель (версия 2.0)
Найденные решения
(1) Kutuzov, в статье "Опять двойка" есть описание и обсуждение этой проблемы. И объяснение ее природы. В комментарии http://forum.infostart.ru/forum24/topic75023/message908183/#message908183 приведен код для использования ЗаписьXML. Это действительно самый быстрый способ.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Самое интересное - скорость обработки возрастает не линейно, а в прогрессии.
Кстати. А вариант в вашем случае отрабатывает практически мгновенно:
Кстати. А вариант в вашем случае отрабатывает практически мгновенно:
Сообщить("Начало 3:" + ТекущаяДата());
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать("c:\upload\1.txt");
СтрокаТекста = ТекстДок.ПолучитьСтроку(1);
СтрокаТекстаРезультат = СтрЗаменить(СтрокаТекста, ";", ",");
СтрокаТекстаРезультат = СтрЗаменить(СтрокаТекстаРезультат, """" + Символы.ПС + """", ",");
Сообщить(СтрокаТекстаРезультат);
Сообщить("Конец 3:" + ТекущаяДата());
(1) Kutuzov, в статье "Опять двойка" есть описание и обсуждение этой проблемы. И объяснение ее природы. В комментарии http://forum.infostart.ru/forum24/topic75023/message908183/#message908183 приведен код для использования ЗаписьXML. Это действительно самый быстрый способ.
Для слияния строк используй ЗаписьXML ЗаписатьБезОбработки
http://www.forum.mista.ru/topic.php?id=689081#25
Да и добавлять лучше не по одному элементу а сразу копировать диапазон
Например
http://www.forum.mista.ru/topic.php?id=560193#1
Например
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот