Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2010-04-19 22:16:23 ЛС | профиль | цитата
Скажите мне, чем отличается моя функция PosEx и PosEx текущая, кроме времени ее исполнения ( ), а так же, почему нельзя стандартную заменить на мою (совместимости это не перечит)
#pas
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var str:string;
i:integer;
begin
str := '';
Result := 0;
if offset > 0 then begin
str := CopyEnd(substr,offset);
i := Pos(str,s);
if i > 0 then Result := i + offset - 1;
end else Result := pos(substr,str);
end;
А так же схемка теста времени
Add(MainForm,2953706,21,105)
{
Width=163
Height=143
}
Add(InlineCode,11935733,371,161)
{
@Hint=#8:Standart|
WorkPoints=#5:doPos|
EventPoints=#5:onPos|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.doPos;|5:begin|48: _hi_onEvent(onPos,PosEx('123','s123s123s',3));|4:end;|0:|4:end.|
link(onPos,14267925:doText,[])
AddHint(34,-61,55,13,@Hint)
}
Add(InlineCode,16698845,371,224)
{
@Hint=#2:My|
WorkPoints=#5:doPos|
EventPoints=#5:onPos|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|74:function PosEx2(const SubStr, S: string; Offset: Cardinal = 1): Integer;|15:var str:string;|14: i:integer;|5:begin|13: str := '';|15: Result := 0;|27: if offset > 0 then begin|35: str := CopyEnd(substr,offset);|21: i := Pos(str,s);|44: if i > 0 then Result := i + offset - 1;|38: end else Result := pos(substr,str);|4:end;|0:|28:procedure THiAsmClass.doPos;|5:begin|49: _hi_onEvent(onPos,PosEx2('123','s123s123s',3));|4:end;|0:|4:end.|
link(onPos,6078964:doText,[])
AddHint(58,76,29,13,@Hint)
}
Add(For,10753889,322,161)
{
End=100000
@IsLib=True
link(onEvent,11935733:doPos,[])
link(onStop,3504164:doStop,[(366,174)(366,162)(261,162)(261,174)])
}
Add(For,4107591,322,224)
{
elink(10753889)
link(onEvent,16698845:doPos,[])
link(onStop,13453645:doStop,[(366,237)(366,225)(261,225)(261,237)])
}
Add(Button,14588975,189,161)
{
Left=5
Top=10
Caption="test"
link(onClick,14186092:doEvent1,[])
}
Add(Hub,14186092,238,161)
{
link(onEvent1,3504164:doStart,[])
link(onEvent2,13453645:doStart,[(262,174)(262,230)])
}
Add(TimeCounter,3504164,273,161)
{
link(onStart,10753889:doFor,[])
link(onStop,3014420:doText,[(312,174)(312,181)])
}
Add(TimeCounter,13453645,273,224)
{
link(onStart,4107591:doFor,[])
link(onStop,5385417:doText,[(313,237)(313,223)])
}
Add(Message,11704833,525,196)
{
}
Add(Edit,14267925,420,161)
{
Left=70
Top=10
}
Add(Edit,6078964,420,224)
{
Left=70
Top=35
}
Add(Edit,3014420,469,175)
{
Left=70
Top=70
Text="time1"
link(onChange,6782821:doWork1,[(513,181)])
}
Add(Edit,5385417,469,217)
{
Left=70
Top=95
Text="time2"
link(onChange,6782821:doWork3,[(513,223)])
}
Add(HubEx,6782821,509,196)
{
link(onEvent,11704833:doMessage,[])
}
P.S: у меня результаты таковы: time1 = 3300; time2 ~ 3040
карма: 10
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#2: 2010-04-19 22:26:33 ЛС | профиль | цитата
Assasin писал(а):
совместимости это не перечит

Ошибаешься, совместимость ты уже нарушил вот здесь, в объявлении переменных

#pas
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
Те, вот такое обращение: PosEx(Sub, Str), у тебя работать не будет
И вообще, если ты что-то предлагаешь, то будь добр оставлять имена переменных и их объявления без изменений

------------ Дoбавленo в 22.26:
Во-вторых, я не знаю с чем это связано (не я писал эту функцию), но в поиске отсутствует функция Pos, которую ты применил для всех случаев, она там используется только при поиске с начала
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#3: 2010-04-19 22:30:15 ЛС | профиль | цитата
nesco писал(а):
Ошибаешься, совместимость ты уже нарушил вот здесь, в объявлении переменных

Невелика проблема! Заменил содержимое
nesco писал(а):
в поиске отсутствует функция Pos

nesco, ты что Это же стандартная функция из юнита System
карма: 10
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#4: 2010-04-19 22:38:42 ЛС | профиль | цитата
Assasin писал(а):
ты что

И причем здесь это, мало ли где, может находится эта функция, причем тут стандартная или не стандартная
Она тоже применяется, но только при поиске с начала, значит, были какие-то проблемы с этой функцией при поиске с любого места
------------ Дoбавленo в 22.35:
Assasin писал(а):
Невелика проблема!

Я уже написал тебе, учти на будущее
nesco писал(а):
И вообще, если ты что-то предлагаешь, то будь добр оставлять имена переменных и их объявления без изменений

------------ Дoбавленo в 22.38:
И вот эти твои утверждения
Assasin писал(а):
кроме времени ее исполнения

являются окультными. Ты не так давно работаешь над проектом, что бы знать все -- где что, почему и зачем менялось. Я не застал, почему так сделали, а ты и подавно этого не знаешь
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#5: 2010-04-19 22:40:46 ЛС | профиль | цитата
nesco писал(а):
Я уже написал тебе, учти на будущее

Ага, все, теперь нашел, видимо отредактировал после того, как я со страницы ушел
nesco писал(а):
значит, были какие-то проблемы с этой функцией при поиске с любого места

Во-первых, у кого
Во-вторых, на наше положение я пока никаких проблем не вижу, что дает возможность запуска теста
------------ Дoбавленo в 22.40:
nesco писал(а):
Ты не так давно работаешь над проектом, что бы знать все -- где что, почему и зачем менялось. Я не застал, почему так сделали, а ты и подавно этого не знаешь

Кстати, я как раз написал
Assasin писал(а):
почему нельзя стандартную заменить на мою

И мне интересно, почему сделали именно так, как сейчас есть
карма: 10
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#6: 2010-04-19 22:43:30 ЛС | профиль | цитата
В-Третьих, как говорил Dilma -- не стоит менять то, что давно и устойчиво работает. Возможные косяки сразу могут и не отследиться
------------ Дoбавленo в 22.42:
Мне кажется, что Dilma не пойдет на замену.
------------ Дoбавленo в 22.43:
Assasin, попробуй прошерстить все релизы Share, возможно, там есть ответ на твой вопрос
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#7: 2010-04-19 22:44:04 ЛС | профиль | цитата
nesco писал(а):
Возможные косяки сразу могут и не отследиться

Читай
Assasin писал(а):
что дает возможность запуска теста

nesco писал(а):
Мне кажется, что Dilma не пойдет на замену

Когда кажется, креститься надо
карма: 10
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#8: 2010-04-19 22:49:26 ЛС | профиль | цитата
Assasin писал(а):
что дает возможность запуска теста

Да причем тут тест Косяки ловятся иногда вне всяких тестов и в таких местах, когда никто их там не ждет
------------ Дoбавленo в 22.49:
Assasin, кстати, твой код у меня дает хуже результат (time1 -- 2278, time2 -- 2378). Так что, в замене я, например, надобности не вижу и категорически против замены этого участка кода
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#9: 2010-04-19 22:55:12 ЛС | профиль | цитата
Я тестировал на виртуальной незасоренной системе Win XP SP3, там разница очевидна, а на засоренной основной системе XP SP3 результаты примерно одинаковы (разность межу ними примерно +- 70 )
карма: 10
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#10: 2010-04-19 23:06:57 ЛС | профиль | цитата
Assasin, в твоем коде есть один существенный недостаток -- ты используешь CopyEnd(substr,offset), что будет тормозить при большой длине строки и жрать память на дополнительную переменную str, или ты не знаешь, что выделение памяти занимает у системы время (вот откуда у тебя и результат на лысой системе выше, она свободна), я не смотрел код функции Pos, но, похоже, она построена не на шибко оптимальнои коде. Этого лишен стандартный код, он использует последовательное чтение строки и последовательное приближение к поисковой строке
------------ Дoбавленo в 23.06:
Assasin писал(а):
разность межу ними примерно +- 70

Я десять раз прогнал тест, и десть раз он мне показал стабильное отставание твоего кода
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2010-04-20 00:28:38 ЛС | профиль | цитата
да, nesco, верно заметил, что все плюсы предложенного решения нивелируются при поиске в больших строках. Существующее решение лишено этого недостатка.
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#12: 2010-04-20 01:28:13 ЛС | профиль | цитата
nesco писал(а):
Assasin, кстати, твой код у меня дает хуже результат
у меня тоже.
Assasin писал(а):
Я тестировал на виртуальной незасоренной системе Win XP SP3

Assasin, т.е. при переходе на твой код все должны перейти и на "виртуальную незасоренную систему"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 4698
Рейтинг: 426
#13: 2010-04-20 14:15:47 ЛС | профиль | цитата
Dilma писал(а):
да, nesco, верно заметил, что все плюсы предложенного решения нивелируются при поиске в больших строках. Существующее решение лишено этого недостатка

Все, понял, мое решение казнить
Tad писал(а):
Assasin, т.е. при переходе на твой код все должны перейти и на "виртуальную незасоренную систему?

Нет, я такого не говорил, тем более вопрос уже исчерпан
карма: 10
0
Ответов: 16884
Рейтинг: 1239
#14: 2010-04-20 16:31:57 ЛС | профиль | цитата
Assasin, а так средняя скорость одинакова, а результирующие коды аж !... на 36 байт короче
------------ Дoбавленo в 16.31:
Assasin писал(а):
тем более вопрос уже исчерпан
любую возникшую идею нужно проверить

Все знают, что этого сделать нельзя.
Находится один, который этого не знает.
Он и делает великое открытие.

Так что не трусь. Все нормально.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1testposex.sha [3KB] [203]
Ответов: 8930
Рейтинг: 823
#15: 2010-04-20 17:06:23 ЛС | профиль | цитата
Tad, [flood]testposex.sha - эту схему я не буду даже скачивать, не говоря уж о проверке [/flood]
карма: 19

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