0. YPermitin 8314 21.02.20 07:53 Сейчас в теме

Совместимость работы со строками. Жизнь до 8.3.6 и после

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. json 2627 21.02.20 09:06 Сейчас в теме
Юрий, спасибо, что упомянул меня.

Круто, что описал функцию СтрСравнить().

Позволю себе немного критики по поводу твоего варианта СтрНайти().
1. Код функции не компилируется. Не везде исправил название переменной НаправлениеПоиска на НаправлениеПоискаСтроки. Надо поправить.
2. В твоем варианте эта функция тянет за собой еще три функции. В моем варианте эта функция самостоятельная. (Согласен это мелочь, но имхо автономная функция удобнее в данном случае)
3. Твой вариант функции не во всех случаях отрабатывает как в платформе.
У меня в публикации в первом комментарии я приложил юнит-тесты. Там суть в том, что ты запускаешь их на новой платфроме, и тест сравнивает результат платформенного метода с написанным тобой методом. Если есть расхождения то он их сообщает. У меня тест по твоей функции выдал 27 случаев, когда твоя функция отработала по-другому (какие-то из них являются повторами). По факту я увидел два недочета: некорректно отрабатывает поиск с конца, а также поиск с начала при пустых строках.

Примеры несовпадений
СтрНайти:[Строка:**1212][Подстрока:12][СКонца][Позиция:5][Вхождение:2]
Ожидаем:3, по факту: 0
СтрНайти:[Строка:1212][Подстрока:12][СКонца][Позиция:4][Вхождение:1]
Ожидаем:3, по факту: 0
user811769; acanta; YPermitin; +3 Ответить
2. YPermitin 8314 21.02.20 09:27 Сейчас в теме
(1) благодарю!

Со всем согласен. Пункт третий исправлю вечером, очепятался :)
Юнит-тесты погоняю :)

А так да, в основном в связке с БСП пилил. Поэтому образения к внешним функциям, но это не долдно быть так критично.
3. VmvLer 21.02.20 10:29 Сейчас в теме
почитал всплакнул
прям как на первой лабе по программированию
- а сейчас ребята мы рассмотрим методы работы со строками и напишем вашу первую функцию.
- а когда мы будем работать с указателями?
- никогда! если не умеете работать со строками, то я вас отчислю!
user811769; triviumfan; YPermitin; +3 Ответить
6. json 2627 21.02.20 10:52 Сейчас в теме
(3) Правильно, поплачь.
Только это ты и умеешь.

Пишут тут на Инфостарте фигню какую-то, не такую как ты хочешь.
Да еще и тебя читать заставляют.
Такого мегакрутого спеца
YPermitin; Алексей_mir2mb; +2 Ответить
4. logarifm 1072 21.02.20 10:32 Сейчас в теме
раз уж пошла такая пьянка - про "СтрСоединить()" если не трудно допишите, что этот метод следует применять вместо конкатенации строк. Особенно если дело идет о реально больших наборах, например логирование обмена данными между системами. А доводы представлю только это не хайп СтрСоединить() быстрее обычной конкатенации строк.
user811769; YPermitin; +2 Ответить
5. YPermitin 8314 21.02.20 10:37 Сейчас в теме
(4) согласен. Ссылку тоже добавлю.

+
7. Sashares 18 21.02.20 10:59 Сейчас в теме
(5)обход деградации производительности при конкатенации через Текстовый документ. https://partners.v8.1c.ru/forum/t/1190296/m/1190331
YPermitin; +1 Ответить
12. AlexO 128 22.02.20 16:21 Сейчас в теме
(7)хватит уже на партнерку выкладывать ссылки. Даже у партнеров уже доступ пропал.
Или скрин давайте, или текст. Или не выкладывайте ничего.
YPermitin; +1 Ответить
24. Sashares 18 25.02.20 09:45 Сейчас в теме
(12)Собственно, суть метода я написал.
Сообщение из ссылки выше.

0
Додатко Виктор (Актіо-АйТі, Днепр)
25.10.2013 22:04
1190331
Отвечает на

Деградации вполне можно избежать средствами платформы!

Используйте объект ТекстовыйДокумент. Я слегка изменил Ваш тест :
Процедура КнопкаВыполнитьНажатие(Кнопка)
   //ОчиститьСообщения();    
   Нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
   СамоИмяФайлаВАрхивеТекст = СокрЛП("sdsd11213");
   ТекстПроблемРезультат ="";
   КоличествоПолейДолжноБыть = СокрЛП(2);
   ТекстПроблем = "";
   Для Инд = 0 По Итераций цикл //ТекстовыйФайл.КоличествоСтрок() Цикл
       СейчасЧислоВхожд = 3;
       
       ТекстПроблем = ТекстПроблем + "В файле: ";
       ТекстПроблем = ТекстПроблем + СамоИмяФайлаВАрхивеТекст;
       ТекстПроблем = ТекстПроблем + ", в строке №" + Инд;
       ТекстПроблем = ТекстПроблем + " не верное количество разделителей; должно быть " + КоличествоПолейДолжноБыть;
       ТекстПроблем = ТекстПроблем + ", а сейчас " + СейчасЧислоВхожд;
       ТекстПроблем = ТекстПроблем + ";" + Символы.ПС;    
   КонецЦикла;
   ТекстПроблемРезультат = ТекстПроблемРезультат + ТекстПроблем;
   Окончание = ТекущаяУниверсальнаяДатаВМиллисекундах();
   Сообщить("Тест 1 : итераций "+Итераций+" время : "+ Прав("                    "+(Окончание - нач),20)+" мс, длина строки " + СтрДлина(ТекстПроблемРезультат));

    тДок = новый ТекстовыйДокумент;
    Нач = ТекущаяУниверсальнаяДатаВМиллисекундах();
    Для Инд = 0 По Итераций цикл //ТекстовыйФайл.КоличествоСтрок() Цикл
       СейчасЧислоВхожд = 3;
       
       ТекстПроблем = "В файле: ";
       ТекстПроблем = ТекстПроблем + СамоИмяФайлаВАрхивеТекст;
       ТекстПроблем = ТекстПроблем + ", в строке №" + Инд;
       ТекстПроблем = ТекстПроблем + " не верное количество разделителей; должно быть " + КоличествоПолейДолжноБыть;
       ТекстПроблем = ТекстПроблем + ", а сейчас " + СейчасЧислоВхожд;
       ТекстПроблем = ТекстПроблем + ";" ;    
      тДок.ДобавитьСтроку(ТекстПроблем);
   КонецЦикла;
   ТекстПроблемРезультат1 = тДок.ПолучитьТекст();
   
   Окончание = ТекущаяУниверсальнаяДатаВМиллисекундах();
   Сообщить("Тест 2 : итераций "+Итераций+" время : "+ Прав("                    "+(Окончание - нач),20)+" мс, длина строки " + СтрДлина(ТекстПроблемРезультат1));
КонецПроцедуры
Показать






Мои результаты :

Тест 1 : итераций 100 время : 4 мс, длина строки 9 586
Тест 2 : итераций 100 время : 5 мс, длина строки 9 586
Тест 1 : итераций 1 000 время : 98 мс, длина строки 95 988
Тест 2 : итераций 1 000 время : 49 мс, длина строки 95 988
Тест 1 : итераций 10 000 время : 37 454 мс, длина строки 977 989
Тест 2 : итераций 10 000 время : 536 мс, длина строки 977 989
Тест 1 : итераций 20 000 время : 171 932 мс, длина строки 1 967 989
Тест 2 : итераций 20 000 время : 1 112 мс, длина строки 1 967 989



Как говорится "почувствуйте разницу !"
Показать
PetrPan; YPermitin; +2 Ответить
8. triviumfan 16 21.02.20 13:15 Сейчас в теме
9. YPermitin 8314 21.02.20 13:36 Сейчас в теме
(8) никто не скрывает :) Даже есть предупреждение :))))
10. bazafaka 22.02.20 00:18 Сейчас в теме
Как хорошо что есть увлеченные программированием программисты, которые не заняты зарабатыванием денег и могут себе позволить нести знанию в массу бесплатно. Большое вам спасибо)
YPermitin; +1 Ответить
11. YPermitin 8314 22.02.20 07:42 Сейчас в теме
(10) уоу уоу, это звучит так, будто я безработный и мне больше нечем заняться :)
17. Yashazz 3197 24.02.20 11:14 Сейчас в теме
(10) С чего это "бесплатно"? Плюсики превращаются в стартмани, а дальше биржа и вуаля.
Особенно умилило, как автор внаглую пиарится, выкладывая ссылки на свои публикации, ваще не связанные по теме с текущей, и это прокатывает.
18. YPermitin 8314 24.02.20 11:29 Сейчас в теме
(17) ссылки на разработки добавил, чтобы повысить интерес и не вижу в этом ничего противозаконного. Если администрация против будет, то уберу.

За статью получил 10 SM. Что не много.

Ваш негатив не понятен :(
19. Yashazz 3197 24.02.20 11:59 Сейчас в теме
(18) Вот в том и беда, что "а чо такова", рекламируетесь и типа ОК, и единственное, что Вам пришло в голову, это "противозаконность". Есть ещё элементарная адекватность при публикации материалов, есть понятие замусоривания и размывания темы (флуда и оффтопа). Механизм ИС позволяет заинтересованным самостоятельно принять решение, перейти к списку других публикаций, отобрать по теме... А эти ваши ссылки, как назойливая и даже не-контекстная реклама, типа баннеров, "нате вот докучи". Ладно бы по обсуждаемому вопросу, но нет - причём тем же стилем и в том же блоке оформления, что и материал статьи. Нечистоплотно как-то с точки зрения уважения к читателю и информации. Имхо.
20. YPermitin 8314 24.02.20 12:31 Сейчас в теме
(19) Вы человек с сильным словом :)
21. json 2627 24.02.20 14:23 Сейчас в теме
(19) Автор оставляет ссылки на свои же статьи в своих же статьях.
"Элементарная адекватность" как ты выражаешься - не нарушена.
Если ты не согласен - пиши в администрацию ИС, а не в комментариях. Незачем разводить срач в комментариях.

Что является назойливым, неадекватным и нетактичным - это писать токсичные комментарии под каждой статьей, за которую проголосовали.
Также считать авторское вознаграждение - тоже не культурно. Тебе какая разница сколько начислили СМ? У тебя что ли их отнимают?
Просто завистливость и необоснованный негатив. Ничего более в твоих комментариях нет.

p.s. Хорошо, что вас на ИС всего два таких персонажа, которые постоянно чем-то недовольны
22. Yashazz 3197 24.02.20 15:49 Сейчас в теме
(21) Когда некто ест руками, чавкает и хлюпает, это тоже, с его точки зрения, не есть нарушение адекватности. Потому что адекватность, она разная) И еду у соседей по столу не отнимает, и в чужие тарелки не лезет, и под локти не толкает. Не спорю. Только вот есть понятие "воспитанность", этика поведения в некоем социуме. Так и в данном случае.

В администрацию ИС я уже писал, спасибо. В марте 2009 года я попытался выложить статью, где была ссылка на мою, на тот момент единственную, публикацию. И огрёб от модераторов вполне достаточно, чтобы усвоить, цитирую примерно, "публикация Б не есть место для рекламы публикации А". Там же было что-то про умение чувствовать разницу между профессиональным материалом и пиаром. Вот мне хватило.

А некоторым норм.
23. YPermitin 8314 24.02.20 15:50 Сейчас в теме
(21) Яков Коган - яркий человек. Не нужно его "тыкать".

Достаточно прочитать историю его комментариев и все встанет на свои места :)
13. AlexO 128 22.02.20 16:27 Сейчас в теме
И все равно СтрНайти недоработана.
Использую свою функцию, которая работает как на 8.2, так и на 8.3.
А вообще - избегаю новомодных только-что-введенных функций.
Постоянно все меняется, к тому же - нет-нет, да прежние платформы подвернутся в использовании.
И очень приятно, когда ранее работающий код сыпется ошибками. Или того хуже - работает, но выдает неправильный результат.
И такое бывает у 1С.
Free1CforAll; YPermitin; +2 Ответить
14. YPermitin 8314 22.02.20 16:32 Сейчас в теме
(13) да, эта функция не идеальна.

Так СтрНайти уже больше 5 лет в платформе. Можно использовать :)
Free1CforAll; +1 Ответить
15. AlexO 128 22.02.20 18:11 Сейчас в теме
(14)
Так СтрНайти уже больше 5 лет в платформе
Можно. Но осторожно ))
Так какой-то гниловатый нюанс при поиске не с начала с обратного конца (и при поиске в обратную сторону нет задания начала поиска - с отсчетом с конца, а не с начала), так ничего и не исправили. Да и функционала недостаточно, не гибко настраиваемая, не до конца.
Поэтому - только свое )
Free1CforAll; Yashazz; YPermitin; +3 Ответить
16. YPermitin 8314 22.02.20 18:49 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день

Специалист 1 категории (Программист 1С ФЗД)
Фрязино
зарплата от 110 000 руб.
Полный день

Специалист 1 категории (Программист 1С)
Фрязино
зарплата от 110 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист 1 категории (Методист-аналитик 1С)
Фрязино
зарплата от 100 000 руб.
Полный день