Вверх ↑
Этот топик читают: Гость
Ответов: 1535
Рейтинг: 176
#1: 2013-10-21 15:19:07 ЛС | профиль | цитата
MultiReplace неправильно заменяет строки. Как это исправить не понимаю. Список замен именно тот, который я указал в примере. Кто знает, как это решить?
Add(MainForm,1138660,105,49)
{
Width=571
Height=368
Caption=""
link(onCreate,13808907:doFor,[])
}
Add(MultiReplace,10469307,518,259)
{
link(onResult,1296520:doStrCatDlm,[])
link(ReplaceList,13069257:Text,[(531,247)(421,247)(421,314)(377,314)])
}
Add(ListBox,3042455,616,259)
{
Left=140
Top=5
Width=120
Height=310
}
Add(For,13808907,147,63)
{
End=10
link(onEvent,1661086:doFor,[])
link(onStop,16664056:doData,[(187,76)(187,286)])
}
Add(For,1661086,280,63)
{
End=10
link(onEvent,10986600:doNext,[])
}
Add(FormatStr,10401457,273,147)
{
DataCount=3
Mask="%1:%2=%3;"
Point(FString)
link(onFString,14183738:doAdd,[])
link(Str1,1441496:Var3,[(279,131)])
link(Str2,9172725:Var2,[])
}
Add(DoData,16664056,322,280)
{
link(onEventData,13069257:doText,[])
link(Data,14183738:Text,[])
}
Add(CounterEx,10986600,329,63)
{
Max=1000
link(onNext,1068134:doEvent1,[(366,69)(366,122)(198,122)(198,153)])
}
Add(StrCatDelim,1296520,567,259)
{
@Hint=#24:Для наглядного сравнения|
Delimiter=">>"
link(onStrCatDlm,3042455:doAdd,[])
link(Str1,10144507:Item,[(573,247)(557,247)(557,305)(454,305)])
AddHint(-67,-52,154,13,@Hint)
}
Add(ListBox,13069257,371,259)
{
Left=10
Top=5
Width=120
Height=310
DataType=1
link(onChange,10144507:doEnum,[])
}
Add(StrList,14183738,322,147)
{
}
Add(StrList,802307,434,196)
{
}
Add(FormatStr,5421523,252,196)
{
Mask="%1:%2"
Point(FString)
link(onFString,802307:doAdd,[])
link(Str1,1441496:Var2,[])
link(Str2,9172725:Var1,[(265,110)])
}
Add(Hub,1068134,210,147)
{
link(onEvent1,10401457:doString,[])
link(onEvent2,5421523:doString,[(234,160)(234,202)])
}
Add(GetDataEx,1441496,252,126)
{
Angle=3
link(Data,13808907:Position,[(153,131)])
}
Add(GetDataEx,9172725,280,105)
{
link(Data,1661086:Position,[])
}
Add(ArrayEnum,10144507,448,259)
{
link(onItem,10469307:doMultiReplace,[])
link(Array,802307:Array,[])
}
------------ Дoбавленo в 15.19:
Кажется, до меня дошло. Нужно цифры перевести в строки с соответствующим числом знакомест (например так: "0"->"00","5"->"05", и т.д.), тогда, вроде, работает правильно.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Гость
Ответов: 17029
Рейтинг: 0
#2: 2013-10-21 15:30:54 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2017-06-14 18:45:40
карма: 0

0
Разработчик
Ответов: 26153
Рейтинг: 2127
#3: 2013-10-21 15:37:38 ЛС | профиль | цитата
MultiReplace работате сверху вниз, поэтому, строки с большим количеством символов надо ставить в начало списка. Предположим, что стоит сначала замена 5=3, а потом 50=6, то сначала будут найдены и заменены все 5, даже там, где будет 50, а замена 50 уже вообще не отработает. Но поставив сначал 50=6, а затем 5=3, будут сначала заменеы все 50, а уже потом, отставшиеся 5.
карма: 22

1
Голосовали:ser_davkin
Ответов: 16884
Рейтинг: 1239
#4: 2013-10-21 16:31:14 ЛС | профиль | цитата
nesco писал(а):
Но поставив сначал 50=6, а затем 5=3, будут сначала заменеы все 50, а уже потом, отставшиеся 5.
Это должен делать алгоритм компонента.
Анекдот писал(а):
После крика в зале аэропорта "Алла, я в бар ! ", половине пассажиров находившемся в зале пришлось срочно поменять трусы.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26153
Рейтинг: 2127
#5: 2013-10-21 17:11:59 ЛС | профиль | цитата
Tad писал(а):
Это должен делать алгоритм компонента

Хватит уже сверхинтеллектуальные компоненты лепить. Кому надо, тот сам отсортирует
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#6: 2013-10-21 18:03:31 ЛС | профиль | цитата
Извини, вернусь
nesco писал(а):
Но поставив сначал 50=6, а затем 5=3,
Об этом где-то в описании точек написано ? Я не нашёл.
Было бы написано - не было бы
ser_davkin писал(а):
MultiReplace неправильно заменяет строки.
Не написано - значит должно делаться автоматом ИМХО, а не "Кому надо, тот сам отсортирует (с)".
И ничего в этом "сверхинтеллектуального" нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26153
Рейтинг: 2127
#7: 2013-10-21 19:04:11 ЛС | профиль | цитата
Tad писал(а):
значит должно делаться автоматом

Не должно, потому, что возможны различные ситуации, когда автосортировка будет неприменима. Компонент останется "как есть" и ничего в него добавляться не будет. Если тебе надо, можешь себе добавить.
------------ Дoбавленo в 19.04:
Добавил описание в справку
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#8: 2013-10-21 19:20:52 ЛС | профиль | цитата
nesco писал(а):
возможны различные ситуации, когда автосортировка будет неприменима
значит должен быть выбор.
nesco писал(а):
Компонент останется "как есть" и ничего в него добавляться не будет.
Мне соответственно глубоко одно.........
Шютка писал(а):
Даже если вас съели, то у Вас есть два выхода.
nesco писал(а):
Добавил описание в справку
Тоже выход. Правда второй вариант - через ж...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 4698
Рейтинг: 426
#9: 2013-10-23 15:49:42 ЛС | профиль | цитата
Tad, nesco все верно говорит, бывают ситуации, когда надо каскадно заменять одни последовательности на другие, включая получившиеся при предыдущей замене.
А
Tad писал(а):
должен быть выбор.
, так он и так есть: ты либо располагаешь более длинные строки вверху и получаешь необходимый результат, либо прекращаешь думать (что плохо для разработчика, не правда ли?) и идешь на форум сообщать о баге в компоненте.
А чтобы как раз не было таких случаев, что кто-то не знал об этой особенности расположения строк для замены, здесь ты сказал правильно - нужно отписать в справку.
карма: 10
1
Голосовали:andrestudio
Ответов: 16884
Рейтинг: 1239
#10: 2013-10-23 18:52:36 ЛС | профиль | цитата
Assasin, code_32113.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_32113.txt [879B] [297]
Ответов: 9906
Рейтинг: 351
#11: 2013-10-23 21:02:45 ЛС | профиль | цитата
Assasin писал(а):
что кто-то не знал об этой особенности расположения строк для замены


Внимание, вопрос: А ЧТО ОН ЗНАЛ
Какая у него самого была версия происходящего? Которая, самым обидным образом - вдруг не оправдалась

Варианты: ничего не знал, но хотел, чтобы работало - не предлагать.
Ибо тупым программирование противопоказано
карма: 9

0
Разработчик
Ответов: 4698
Рейтинг: 426
#12: 2013-10-23 21:43:14 ЛС | профиль | цитата
Galkov, даже у профи ведь бывают промахи, здесь человек обратился для рядового пользователя, не сильно углубляющимся в дебри работы компонентов, с вполне очевидным вопросом, к тому же еще и помог найти слабую сторону в описании компонента. Хочешь сказать он тупой и в чем-то виноват что ли?
карма: 10
0
Ответов: 1376
Рейтинг: 197
#13: 2013-10-23 21:58:13 ЛС | профиль | цитата
[offtop]
Assasin писал(а):
даже у профи ведь бывают промахи
Да что там профи, даже у меня... [/offtop]
карма: 1

0
Ответов: 9906
Рейтинг: 351
#14: 2013-10-23 21:59:55 ЛС | профиль | цитата
Assasin, речь идет не о функционировании изнутри, а о функционировании снаружи.
Если я проектирую использование микросхемы в своей схеме, то я это делаю осознанно, понимая (возможно и неправильно) чего она будет делать в моих условиях. И вовсе не интересуюсь, из каких транзисторов все это состоит.

И это вовсе не метод тыка: притулил по типу, а вдруг заработает.
Вот я и спрашиваю, чего себе думал тот чел, который подставил микросхемку MultiReplace
Что вся сотня замен произойдет одновременно?
Или вообще ни о чем не думал?

карма: 9

0
Ответов: 1535
Рейтинг: 176
#15: 2013-10-23 22:51:40 ЛС | профиль | цитата
Assasin писал(а):
Хочешь сказать он тупой и в чем-то виноват что ли?
Это его мнение, что же я могу поделать. Хотя, я был другого мнения о нём.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)