Instr

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Instr

Сообщение SeRRg » 20.01.2005 (Чт) 16:13

Здравствуйте!
У меня есть программа, которая много раз вызывает функцию InStr
Я обнаружил, что она очень тормозная :) Не могли бы вы мне подсказать,
как ее "ускорить" или альтернативный вариант решения данной задачи:
Нужно узнать, сколько раз встречаются и на каких местах стоят данные символы в данной строке.
Заранее благодарен...
VB - это звучит!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.01.2005 (Чт) 16:17

Более развёрнуто сформулируй задачу, может чего придумаем :-)
Что где ищется, и с какой целью?
Изображение

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 20.01.2005 (Чт) 16:23

посмотри эту статью

http://www.rsdn.ru/article/alg/textsearch.xml
//<-
Mit freundlichen Grüßen
//->

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 20.01.2005 (Чт) 16:28

Попробую.
Я пытаюсь сделать печально известный artmoney на VB.
Если я ищу какую-либо цифру, то ее представление получается 1-3 байта
(если ее разбить на старший, средний и младший байт)
После этого я считываю ReadProcessMemory кусок памяти (не известно какого размера
чаще - 4096 байт)
А после этого ищу эти байты в только что считанном куске функцией InStr
lPos = InStr(1, sbuffer, sSearchString, vbBinaryCompare)
Получив позицию, я заношу все в спец массив, обрезаю строку слева и повторяю InStr.

Если программа маленькая (занимает мало памяти), то это происходит относительно быстро, но если
взять программу побольше, то начинает тормозить. Вот мне и хотелдось бы узнать,
как можно сделать по-другому.
VB - это звучит!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.01.2005 (Чт) 17:33

Попробуй не обрезать строки, а менять аргумент start при вызове InStr. Мне кажется, что у тебя самая медленная операция - обрезание строк.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.01.2005 (Чт) 17:55

InStr тормозная???
Ты шутишь или издеваешься? Мало какая другая функция работает столь же быстро. Насколько я помню, она не обращается к виртуальной машине, а компилируется непосредственно в машинный код.
Lasciate ogni speranza, voi ch'entrate.

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 20.01.2005 (Чт) 18:53

Извиняюсь... Я timegettime поставил после обрезания строки :oops: :oops: :oops:
Время после корректировки уменьшилось в два раза... Теперь хоть терпимо :P Спасибо!!!!!!
VB - это звучит!

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 21.01.2005 (Пт) 12:26

Попробуй порезать строки по VbCrlf и искать уже в отдельных сегментах массива. Вообще кроме InStr есть и InstrRev :) Тут нужно манипулировать всякими такими командами... Манипулировать и не бояться начинать с начала :)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList