Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2010, 16:21   #1
dimafe6
Пользователь
 
Регистрация: 28.01.2010
Сообщений: 16
По умолчанию Поиск в MEMO

Здрасте. Как осуществить поиск по полю MEMO? Например есть поле MEMO, с текстом книги, нужно сделать так, чтобы был поиск по етому полю и виводился номер символа первой буквы искомого слова неучитывая пробелы.
dimafe6 вне форума Ответить с цитированием
Старый 09.02.2010, 16:31   #2
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
Как осуществить поиск
Поиск чего? Учитесь формулировать вопрос (задачу) максимально конкретно. Тогда и ответ получите и быстрее и точнее.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 09.02.2010, 16:33   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

pos() вам в помощь.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.02.2010, 21:04   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
pos() вам в помощь.
Без обид, но это:
1. Медленно
2. Не универсально (только с начала текста)

Использовать PCHAR на вашу строку String (ну там вроде Lines.Text, уже и не помню). Дальше в цикле while(PCHAR^ != #0) do ; и перебираете все так символы. То что надо запоминаете, что не надо отсеиваете.
BOBAH13 вне форума Ответить с цитированием
Старый 09.02.2010, 21:30   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

dimafe6, а поиск в Google или по форуму вам тоже не знаком?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 09.02.2010, 21:30   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Дальше в цикле while(PCHAR^ != #0) do ; и перебираете все так символы.
По Вашему это отличается от реализации функи pos? О_о

Код:
S:=Memo1.Text;
While Pos(Sub, S)<>0 do
 Begin
  Memo2.Lines.Add(IntToStr(Pos(Sub, S)));
  Delete(S,1,Pos(Sub, S));
 End;
В Memo2.получите номера символов, с которых начинаются участки, которые Вы ищете.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.02.2010, 21:38   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Alex Cones - а вы впихните 100 МБ текста, и попробуйте что работает быстрее
1. Мой вариант - это уже существует область памяти где расположен текст - мы просто пробегаемся по ней указывая на каждый символ PCHAR и дальше когда надо инкрементируем, и так пока не добежим до нуля (конца строки)
2. Ваш вариант:
a) Pos - поиск только сначала строки до первого совпадения
b) Delete - выполняет удаление/изменение строки - что значит, перевыделение (что ли) памяти для новой строки.
c) Вы вызываете 2 раза Pos - некуда девать кванты ЦП ?

Думаю спорить здесь и об этом, и так явном правильном решении, просто бессмысленно.

raxp
Это просто пример необязательно принимать дословно. Суть в том, чтобы делать производительный код, а не то как легче. Надеюсь хоть до кого-нибудь донес свою идею.

TzX
Сижу тут и отбиваюсь. Спасибо уважаемый, я в курсе, проходили. Как не крути, зачем вызывать отдельную функцию, которая по сути опять таки возьмет указатель на символ, просто смещенный относительно старта поиска (аргумента указанного в вами указанной функции, извините за тавтологию) и проделает туже самую работу что если бы сразу "бегали" по строке с указателем в руках.

Edit:
p.s. я уже даже не знаю что сказать. Либо люди специально придераються к словам не пытаясь уловить сути, либо уже на столько ленивые стали, что подумать и сделать лучше (даже если придется изобретать велосипед) уже не хотят. Не буду флудить, это Ваш выбор делайте как считаете лучше для себя, я просто хотел донести идею и свой опыт, видимо это лишнее. Извините.

Последний раз редактировалось BOBAH13; 09.02.2010 в 22:07.
BOBAH13 вне форума Ответить с цитированием
Старый 09.02.2010, 21:44   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

насчет области памяти вы правы... но 100МВ текста, это что-то невероятное, даже для книжки, большой книжки...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.02.2010, 21:45   #9
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

Цитата:
2. Не универсально (только с начала текста)
Помимо Pos есть еще PosEx, которая ищет не сначала, а с определенного символа. (перед использованием подключить StrUtils)
TzX вне форума Ответить с цитированием
Старый 09.02.2010, 22:03   #10
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Почитал. Ключевой термин - "поиск в Memo".
И где же вы Memo видели на 100 Mб? А, професора вы мои хорошие?
Что вы мозги пудрите ТС с 2-мя сообщениями и 10 п. репутации (кролик).

Цитата:
Что вы мозги пудрите ТС с 2-мя сообщениями и 10 п. репутации (кролик).
Ответ не мальчика, но мужа.
Можно a+b решить таким способом, что у профессоров из Института Космических исследований оставшиеся волосы дыбом встанут...
Вопрос - а зачем ?
Имхо. Михалыч.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось mihali4; 10.02.2010 в 02:59.
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск слова в Memo Rebel123 Общие вопросы Delphi 21 05.05.2012 20:30
Поиск по Memo photozaz Общие вопросы Delphi 5 25.05.2008 17:55
Поиск в Memo Terran Общие вопросы Delphi 4 07.05.2008 23:33
Поиск в поле Memo omi БД в Delphi 6 01.03.2007 18:39