v7: ИзСтрокиСРазделителями #691819


#0 by HE1Cer
Подскажите, можно ли как-то приспособить функцию ИзСтрокиСРазделителями к файлу с разделителями - точка с запятой. Или может есть что-то аналогичное?
#1 by Злопчинский
#2 by Злопчинский
читай построчно, используя указанную функцию из строки формируй СЗ из Сз извлекай нужные данные. . как вариант есть мнение что м.б. твой случай можно читать через установленные драйвера в системе..? .
#3 by Torquader
Если файл специально "подготовить", то можно - только проще сразу читать. Проблема 1С в том, что она не умеет искать в строке символ, начиная с какой-то фиксированной позиции (и восьмая версия тоже) и пока она это не умеет, называть 1С серьёзной системой для анализа содержимого файлов просто нельзя. VbScript вам в помощь и функцию InStr(Начало,Строка,ЧтоИщем,ТипСравнения)
#4 by Злопчинский
есть МОЯстрока = 23;47;58 98 45;60;20 СЗ = глРазложитьИзСтроки(мояСтрока,";"); получится список значений, состоящий из строк: 23 47 58 98 45 60 20
#5 by HE1Cer
Злопчинский, спасибо!
#6 by Злопчинский
можно использовать типовую функцию глРазложить - но она существенно тормознее - при больших обемах уже заметно немного.
#7 by vcv
Интересны три вопроса 1. Почему нет "Перем темпСтрока;" 2. Зачем нужно "темпСтрока = "";" 3. Что будет, если в разбиваемой строке есть ковычки. (последний вопрос самый неинтересный, а на первые два хотелось бы услышать ответ)
#8 by Злопчинский
1. наверное, надо? Почему? - явное определение переменной ускоряет выполнение кода? 2. шоб було. люблю занулять используемые переменные во избежание, возможно и не надо. 3. двойная кавычка заменяется на два апострафа
#9 by vcv
Точно уже не вспомню, но было "исследование" быстродействия переменных, определенных в функции/процедуре, переменных текущего модуля и глобальных переменных. Первые были быстрее. А вот на счет разницы между явным и неявным определением переменной не знаю. Разве что есть вероятность наткнуться на одноименную глобальную переменную или одноименный реквизит...
#10 by Злопчинский
да, читал эту статью по быстродействию
#11 by Torquader
Для 1С разницы в явном или неявном определении переменной нет, так как выделение памяти и ресурсов под переменную происходит в момент компиляции кода, а не в момент исполнения. Глобальная переменная может быть немного "медленнее", так как живёт не в локальной памяти модуля, а требует обращения в блоку переменных модуля. Реквизит будет намного медленнее, чем любая переменная, так как требует выполнение преобразования типа.
#12 by mikecool
"называть 1С серьёзной системой для анализа содержимого файлов просто нельзя." - а с какого перепугу 1с это система анализа содержимого файлов???
#13 by vcv
Мало того, что намного медленнее, еще и обращение к базе с большой вероятностью будет. Например, на форме есть реквизит "Фирма". Выполняю строчку "ТекФирма = Фирма" и получаю вызов хранимой процедуры (на SQL). Недавно смотрел на свою базу в штатный отчет в SQL2005. За пару часов работы хранимая процедура получения фирмы по ID вызвалась более пяти миллионов раз.
#14 by Torquader
Это "хвалёный" механизм представлений, когда для каждого объекта система ещё и формирует представление - особенно, это касается реквизитов, когда в памяти хранится ID, а на экране отображается строка. Потом, у 1С даже целый кеш под эти нужды создан.
#15 by vcv
Вот теперь в раздумьях. Можно ли как-то технично это изменить. Всё же за несколько часов дернуть хранимку пять миллионов раз, даже если всё берется из кеша, это лишнего грузит интерпретатор, оптимизатор и прочие механизмы SQL. Предположительно такое количество обращений к справочнику фирм связано с тем, что очень много процедур в глобальнике обращается к "Конт.Фирма". Для сильно переписанной конфигурации можно завести глобальную переменную под это дело и заполнять её один раз перед проведением документа. Но это тупо и в лоб. Может есть лучшее решение. Завтра попробую разобраться, откуда обращений к хранимой процедуре справочника фирм в несколько раз больше, чем к любой другой хранимой.
#16 by Torquader
Везде, где используется фирма, будет вызываться хранимая процедура, так как ссылка на объект хранится вместе с представлением (для этого его придумали), а система всегда обновляет представление при выполнении каких-то операций. Не знаю, можно ли отключить представление. Самое простое решение - использовать вместо ссылки сам ГУИД, как это обычно делается в Access-е, но это считается неправильным для 1С.
#17 by 1s_ivan
господи вот проблема, ну на 1 функцию больше и что?
#18 by Torquader
А теперь скорость выполнения - во-втором случае, мы создаёт отдельную строку с началом на нужном символе. Если строка очень длинная, то скорости выполнения могут отличаться на несколько порядков.
#20 by kupec
+ может уже было....
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С