Глюк в контекстной замене

 

Попытался я сделать глобальную замену в тексте str на s_str. Вызвал окошко - ввел тексты - нажал кнопочку "заменить все" .... Metaedit-ор ушел в глухой цикл: на экране все дергается и никак замена не закончится. Убил его и сделал тоже самое ручками пошагово. Вот что получается: первые два вхождения найдены и заменены правильно а вот на третьем происходит какоето смещение и текст не заменяется :(

после него находится четвертое вхождение и тоже заменяется нормально, но после этого находится незамененное третье (уже с другим смещением), снова не заменяется но снова находится - и тут бесконечный цикл.

Вот (демо)код на котором это происходит:

int start()
  {
   string str = "01234567890";
   str = StringSubstr(str, 3);
   Print(str);
  }

220 - Build

 
ForexTools >>:

Попытался я сделать глобальную замену в тексте str на s_str. Вызвал окошко - ввел тексты - нажал кнопочку "заменить все" .... Metaedit-ор ушел в глухой цикл: на экране все дергается и никак замена не закончится. Убил его и сделал тоже самое ручками пошагово. Вот что получается: первые два вхождения найдены и заменены правильно а вот на третьем происходит какоето смещение и текст не заменяется :(

после него находится четвертое вхождение и тоже заменяется нормально, но после этого находится незамененное третье (уже с другим смещением), снова не заменяется но снова находится - и тут бесконечный цикл.

Вот (демо)код на котором это происходит:

220 - Build


Это глюк редактора. Он сначала пытается заменить str на s_str, потом находит s_str и пытается заменить ее на s_s_str, потом на s_s_s_str и т.д.

 
Reshetov >>:

Это глюк редактора. Он сначала пытается заменить str на s_str, потом находит s_str и пытается заменить ее на s_s_str, потом на s_s_s_str и т.д.

Нет, не должно быть так. Ведь на рисунке показано, что заменять нужно только слово целиком. Если бы было без отметки "Только слово целиком", то тогда действительно имеем бесконечный цикл.

 
Reshetov >>:

Это глюк редактора. Он сначала пытается заменить str на s_str, потом находит s_str и пытается заменить ее на s_s_str, потом на s_s_s_str и т.д.

если бы :(

посмотрите на скрин - что он там подсветил?! и к томуже - остальные тексты он позаменял правильно. так что скорее всего дело именно в какомто сочетании символов в StringSubstr(str на котором чтото и глюкает. А даже если бы эта галочка не стояла - так зацикливаться оно не должно - следующий поиск должен начинаться ПОСЛЕ последнего вставленного символа и никаких s_s_s_str не должно быть ваааааще

 

Можно гарантировать отсутствие ответа от Метаквотов. Это будет большим чудом, если ответят.

Подобную тему поднимал. Ни одного ответа от них не было.

 
Zhunko >>:

Можно гарантировать отсутствие ответа от Метаквотов. Это будет большим чудом, если ответят.

Ну я надеюсь что они читают этот форум более менее внимательно и на моем тестовом тексте смогут выловить глюк и в очередном билде его поправят.

А вообщето, (модераторам) наверно стоило бы завести прилепленную веточку "Найденные ошибки" в которой не будет ничего кроме сообщения об ошибке и ответа о том когда и как она была исправлена.

 

А цирк продолжается и в 223 билде...

Задал контекстный поиск одной единственной буковки n с учетом регистра и что нашол ваш редактор?!!!! Это уже вообще ни в какие ворота не лезет...

Господа разработчики - разберитесь пожалуйста и срочно поправьте глюк в контекстной замене

Вот строчка кода в которой глючит ваш поиск

Signal = Calc_Signal(Signal_Name, s, SymbolsNames[n], TF_Period[i], MarkerTime, ShortPeriod, LongPeriod, MethodMA, AppliedPrice);

эта строчка для проверки была единственная вставленная в стандартный шаблон вновь создаваемого советника.


Кстати "\n" тоже обрабатывается по идиотски...

 

А ларчик просто открывался: смещение влево происходит на столько символов, сколько поисковой строки найдется до правильной поисковой комбинации.

В моей строчке до индекса [n] три буквы n:

Signal = Calc_Signal(Signal_Name, s, SymbolsNames[n], ....

вот и сместилась отметка отметка выделения найденного фрагмента на такоеже к-во символов назад. Если убрать\добавить несколько буковок n - неправильное смещение сместится на соответствующую величину.

Где то в коде редактора есть очепятка или логическая ошибка. Теперь найти ее будет легче, поскольку ясно где и как она проявляется.

 
ForexTools >>:

А ларчик просто открывался: смещение влево происходит на столько символов, сколько поисковой строки найдется до правильной поисковой комбинации.

В моей строчке до индекса [n] три буквы n:

вот и сместилась отметка отметка выделения найденного фрагмента на такоеже к-во символов назад. Если убрать\добавить несколько буковок n - неправильное смещение сместится на соответствующую величину.

Где то в коде редактора есть очепятка или логическая ошибка. Теперь найти ее будет легче, поскольку ясно где и как она проявляется.

Теперь только осталось обратить ВЫСОЧАЙШЕЕ внимание на эту находку...

 
Zhunko >>:

Теперь только осталось обратить ВЫСОЧАЙШЕЕ внимание на эту находку...

я уже отправил Ринату в личку сообщение - надеюсь лички он читает внимательнее чем все необъятные темы форума :)


заодно еще один глюк попросил поправить

И заодно поправьте еще один: когда на чарте есть два перекрывающихся текстовых объекта, то при на наезде мышкой на их общую зону выдается подсказка по НИЖНЕМУ объекту, а он может быть полностью скрыт ВЕРХНИМ, и возникает непонятка, почему по видимому объекту над которым висит мышь выдается НЕ ЕГО подсказка: как на этом скрине - сверху линия со знаками равенства и при наезде мыши на нее хочется видеть именно ее подсказку (я этот "трюк" использую чтобы показать дополнительные сведения об объекте), а выдается сами видите что :(


Я так думаю что тут тоже все просто: просто сменить порядок просмотра объектов при поиске текста: если сейчас цикл идет от первого объекта к последнему for(i=0;i<ObjectsTotal();i++) то его надо заменить на обратный for(i=ObjectsTotal();i>=0;i--) ну или наоборот ;)