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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 18:23   #1
Vashkin
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 28
По умолчанию частота использования слова в Memo

Необходимо подсчитать количество повторений определенного слова, например "word", в тексте Memo. И так же есть вопрос по поводу учёта регистра при поиске - Word, word, WOrd... Кто, что подскажет?
Vashkin вне форума Ответить с цитированием
Старый 07.01.2012, 19:42   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Pos,PosEx - регистрочувствительный поиск
Для не чувствительности к регистру можно использовать AnsiUpperCase для преобразования аргументов к одному регистру
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.01.2012, 21:00   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

решение влоб - заносишь все слова в массив, сортируешь, и по сортированному считаешь
иф массив(и)=массив(и+1) зен
инк(каунт)
елзе
каунт=1


блин не в тему... я все слова посчитал....
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 08.01.2012, 00:15   #4
Vashkin
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Pos,PosEx - регистрочувствительный поиск
Для не чувствительности к регистру можно использовать AnsiUpperCase для преобразования аргументов к одному регистру
Ну вот я сделал, но чего то пока не правильно считает
var
Find:string;
i,k:integer;
begin
k:=0;
find:=Edit6.Text;
For i:=0 to Memo1.Lines.Count-1 do
If PosEx(AnsiUpperCase(find), AnsiUpperCase(Memo1.Lines.Text))<>0
Then
Begin
k:=k+1;
end;


АВАТАР, посмотри, в чем может быть ошибка...
Vashkin вне форума Ответить с цитированием
Старый 08.01.2012, 00:28   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

если юзать это
Код:
For i:=0 to Memo1.Lines.Count-1 do
то зачем вот это
Код:
If PosEx(AnsiUpperCase(find), AnsiUpperCase(Memo1.Lines.Text))<>0
тогда нужно
Код:
 If PosEx(AnsiUpperCase(find), AnsiUpperCase(Memo1.Lines[i]))<>0
И этот код будет работать если у тебя по 1 слову в строке
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 08.01.2012 в 00:31.
Mad_Cat вне форума Ответить с цитированием
Старый 08.01.2012, 00:36   #6
Vashkin
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
И этот код будет работать если у тебя по 1 слову в строке
Так а если не одно,если обычный текст в Memo? что необходимо изменить в цикле?
Vashkin вне форума Ответить с цитированием
Старый 08.01.2012, 00:40   #7
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
что необходимо изменить в цикле?
Код:
var s:string;

For i:=0 to Memo1.Lines.Count-1 do
begin
s:=Memo1.Lines[i];
while PosEx(AnsiUpperCase(find), AnsiUpperCase(s))<>0 do
begin k:=k+1;
delete(s,1,PosEx(AnsiUpperCase(find), AnsiUpperCase(s))+length(find)-1);
end;
end;
а еще лучше без цикла for
Код:
s:=Memo1.text;
while PosEx(AnsiUpperCase(find), AnsiUpperCase(s))<>0 do
begin k:=k+1;
delete(s,1,PosEx(AnsiUpperCase(find), AnsiUpperCase(s))+length(find)-1);
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 08.01.2012 в 00:47.
Mad_Cat вне форума Ответить с цитированием
Старый 08.01.2012, 00:51   #8
Vashkin
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 28
По умолчанию

Mad_Cat, огромное спасибо, все получилось! Спасибо!)))
Vashkin вне форума Ответить с цитированием
Старый 08.01.2012, 01:14   #9
Vashkin
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 28
По умолчанию

Только вот есть один вопрос... Зачем нужна и что эта строка делает:
delete(s,1,PosEx(AnsiUpperCase(find ), AnsiUpperCase(s))+length(find)-1);
Vashkin вне форума Ответить с цитированием
Старый 08.01.2012, 01:15   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Зачем нужна и что эта строка делает:
она удаляет тот кусок где ваше слово встречается 1 раз
тоесть
есть строка "мама мыла раму" и есть слово "a" после этой операции
останется "ма мыла раму"
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск слова в Memo Rebel123 Общие вопросы Delphi 21 05.05.2012 20:30
В заданном текстовом файле подсчитать частоту использования каждого слова из словаря (другого текстового lineico Помощь студентам 4 09.05.2011 19:35
Взять текст строки Memo до определнного слова Marsel737 Общие вопросы Delphi 6 07.01.2010 18:32
разъясните терминалогию,референсная частота,частота чипа,памяти,шейдерного блока Jesus2.0 Компьютерное железо 5 04.05.2009 07:54
Вставка слова в Memo artemavd Общие вопросы Delphi 1 27.03.2009 16:32