Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск слова в Memo, как организовать..подскажите.. 
V
    Опции темы
TaNK
Дата 26.5.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Скажите пожайлуста, мне надо найти слово в мемо...но я тут поискал на форуме..и нашел что мемо для таких случаев не лучший варианнт..и лучше использовать RichEdit, так ли это...
и вот код который нашел, для поиска слова и его выделения, а мне просто необходимо посчитать количество этих слов..
Код

AnsiString searched_word = "switch";
int a=0;
 int i = RichEdit1->Text.Pos(searched_word);
 RichEdit1->HideSelection = true;
 RichEdit1->SelStart = i - 1;
 RichEdit1->SelLength = searched_word.Length();
a=a+1; //это я вставил....
 RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style << fsBold;


будет ли правильно работать..просто нет под рукой билдера ..



--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Klin
Дата 26.5.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Для выделения текста и Memo подойдет, просто если вы текстовый редактор создаете, тогда конечно лучше RichEdit, так черт с ним, можно и Memo.

Выделенние заданного текста
Код

 int StartPos = 0; // начальная позиция поиска
 if (CheckBox1->Checked == true) StartPos = Memo1->SelStart-1; // если указано, что с курсора - задаем позицию
 AnsiString SearchArea = Memo1->Text.SubString(StartPos,Memo1->Text.Length()); // создаем временную переменную для поиска
 if (SearchArea.Pos(Edit1->Text)) { // если слово есть,  то
  Memo1->SetFocus(); // задать фокус на Memo (иначе не увидишь :) )
  Memo1->SelStart = StartPos + SearchArea.Pos(Edit1->Text)-1-CheckBox1->Checked; // начальная позиция
  Memo1->SelLength = Edit1->Text.Length(); // длина выделения
 }


На форме должен быть Edit - искомое слово, CheckBox - искать с курсора и Memo - нужный текст


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Rodman
Дата 26.5.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

for (int i=0;i<Memo1->Lines->Count;i++)
    if(pos(Edit1->Text, Memo1->Lines->Strings[i])>0)
           ShowMessage("Found!");


а так?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
TaNK
Дата 26.5.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Rodman @ 26.5.2007,  11:30)
Код

for (int i=0;i<Memo1->Lines->Count;i++)
    if(pos(Edit1->Text, Memo1->Lines->Strings[i])>0)
           ShowMessage("Found!");


а так?

попробую.....спасибо..

Добавлено через 1 минуту и 42 секунды
Цитата(TaNK @ 26.5.2007,  12:07)
Цитата(Rodman @ 26.5.2007,  11:30)
Код

for (int i=0;i<Memo1->Lines->Count;i++)
    if(pos(Edit1->Text, Memo1->Lines->Strings[i])>0)
           ShowMessage("Found!");


а так?


попробую.....спасибо..а для подсчета количества слов...пойдет так?
Код

int a=0;
for (int i=0;i<Memo1->Lines->Count;i++)
    if(pos(Edit1->Text, Memo1->Lines->Strings[i])>0)
           a=a+1;



--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Rodman
Дата 26.5.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Цитата(TaNK @  26.5.2007,  11:07 Найти цитируемый пост)
пойдет так?

в полне!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
TaNK
Дата 26.5.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



а еще вопросик, а как возможно огрганизовать поиск если необходимо пару слов искать...в одном тексте..например switch и case..подскажите плиз...


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 27.5.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Rodman - какую необходимо подключить библиотеку, а то билдер ругается на функцию pos, копил пишет Call to undefined function pos?



--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Klin
Дата 27.5.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(TaNK @  27.5.2007,  08:55 Найти цитируемый пост)
Call to undefined function pos?



TaNK, ты то что я написал вообще не читал? Функция Pos должна принадлежать переменной типа AnsiString. 

Код

 if(Edit1->Text.Pos(Memo1->Lines->Strings[i])>0)


    



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Anikmar
Дата 27.5.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Klin @  27.5.2007,  11:27 Найти цитируемый пост)
if(Edit1->Text.Pos(Memo1->Lines->Strings[i])>0)

А что в чемы мы ищем, я что-то не понял
PM MAIL ICQ   Вверх
Klin
Дата 27.5.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



А ну так там еще и наоборот написано smile :

Код

if(Memo1->Lines->Strings[i].Pos(Edit1->Text)>0)



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
TaNK
Дата 27.5.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Klin @ 27.5.2007,  11:57)
А ну так там еще и наоборот написано smile :

Код

if(Memo1->Lines->Strings[i].Pos(Edit1->Text)>0)

Код

AnsiString poisk="case";
if(Memo1->Lines->Strings[i].Pos(poisk)>0)

ты это имел ввиду?

Добавлено через 1 минуту и 7 секунд
я хочу не из эдита их искать, а просто забить какое-то слово уже в код..


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 29.5.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



AnsiString poisk="case";
if(Memo1->Lines->Strings[i].Pos(poisk)>0)
поиск производится не только слова case, но и in_case, mocase
КАк сделать так чтобы было точное совпадение, искалось именно слово case


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Klin
Дата 29.5.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



TaNK, добавь пробелы перед и после слова smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
TaNK
Дата 30.5.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Klin @ 29.5.2007,  17:44)
TaNK, добавь пробелы перед и после слова smile

не помогло...что можно еще придумать...?


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
SenkraD
Дата 30.5.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Попробуй использовать TFindDialog. C с ним насколько я помню можно работать в невидимом режиме.

P.S. Больше пока ничего в голову не прелезло


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Klin
Дата 30.5.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



TaNK, что значит не помогло? Функция Pos ищет точное совпадение символов. Если указан текст поиска указан "case", то оно и ищет первый "This is_case, my case of program", а если указан " case ", то и ищет функция иначе: "This is_case, my[B] case [/B]of program". 

ps. приведи тот код, который ты в итоге использешь.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
TaNK
Дата 30.5.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Klin @ 30.5.2007,  12:23)
TaNK, что значит не помогло? Функция Pos ищет точное совпадение символов. Если указан текст поиска указан "case", то оно и ищет первый "This is_case, my case of program", а если указан " case ", то и ищет функция иначе: "This is_case, my[B] case [/B]of program". 

ps. приведи тот код, который ты в итоге использешь.

Код

int a=0;
AnsiString poisk="case";
for (int i=0; i<Memo1->Lines->Cout; i++) //вроде так
 {
   if(Memo1->Lines->Strings[i].Pos(poisk)>0)
   a=a+1;
  } 

Но даже когда делаю так - AnsiString poisk=" case " ищет все совпадения, а не именно case-слово...во как smile 
Под рукой нет текста программы..

Это сообщение отредактировал(а) TaNK - 30.5.2007, 14:28


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Klin
Дата 30.5.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



TaNK, в данном случае, все работает. Проверяем:
Код

AnsiString poisk=" case ";
for (int i=0; i<Memo1->Lines->Count; i++) //вроде так
 {
   if(Memo1->Lines->Strings[i].Pos(poisk)>0)
   ShowMessage(Memo1->Lines->Strings[i].Pos(poisk));
  }


Возможна ошибка в вашем коде. Но о том, что Pos - ищет точное совпадение символов, могу на крови поклясться.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
TaNK
Дата 30.5.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Klin @ 30.5.2007,  17:34)
TaNK, в данном случае, все работает. Проверяем:
Код

AnsiString poisk=" case ";
for (int i=0; i<Memo1->Lines->Count; i++) //вроде так
 {
   if(Memo1->Lines->Strings[i].Pos(poisk)>0)
   ShowMessage(Memo1->Lines->Strings[i].Pos(poisk));
  }


Возможна ошибка в вашем коде. Но о том, что Pos - ищет точное совпадение символов, могу на крови поклясться.

Хорошо, хорошо, вечером еще раз проверю и отпишу, спасибо за помощь


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 31.5.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Всем большое спасибо...тему закрываю.


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
1BBB1
Дата 13.8.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



помоги я можно сказать 3 дня как С++ начел учить но это прога принципа, суть такая есть некий .txt файл размер его без граничен то есть 70 Mb не предел, так вот слова внем тоже имеют не ограниченную дленну мне нужно считывать каждое слово по порядку и искать в нем к примеру "pass:"  как только это сочитание букв найдено нужно записать следушее считанное слово из файла в отдельный файл и так перерыть весь файл.
в этой теме нащел что это можно сделать спомошью Функция Pos, НО как я говорил выше я новечек и не смог сам понять как эту функцию пременить в моем случае, нужна помош.

Код

int main()
{
int yes = 0; // естли буквы в предложении
char Word; 
char s[6] = "pass:";

 ifstream ifs("0"); // открываем файл 0
  while (1)     

 { !ifs.eof();        //считываем слово

 if(ifs.eof())break;  //проверяем а считалось ли слово если нет значит файл закончился ВЫХОД

    ifs >> Word;      //закидываем считанное слово в переменную Word

        if(yes == 1){   //проверяем найдены ли буквы если да
                  ofstream out("Tet.txt"); //открываем файл Tet.txt
                  out << setw(3) << Word;  // записываем в него слово
                  out.close();
                  yes=0;                 //сброс
                  break;}     // закрываем файл
    else                                    // если нет продолжаем поиск
          while(1)
                if(?)    // сам поиск букв в слове

                yes=1;  // ставим пометку что было найдено сочетание букв
                break;

 return 0;


Это сообщение отредактировал(а) 1BBB1 - 13.8.2007, 14:20
PM MAIL   Вверх
Zorki
Дата 25.11.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.11.2011

Репутация: нет
Всего: нет



Цитата(Klin @ 26.5.2007,  09:43)
Для выделения текста и Memo подойдет, просто если вы текстовый редактор создаете, тогда конечно лучше RichEdit, так черт с ним, можно и Memo.

Выделенние заданного текста
Код

 int StartPos = 0; // начальная позиция поиска
 if (CheckBox1->Checked == true) StartPos = Memo1->SelStart-1; // если указано, что с курсора - задаем позицию
 AnsiString SearchArea = Memo1->Text.SubString(StartPos,Memo1->Text.Length()); // создаем временную переменную для поиска
 if (SearchArea.Pos(Edit1->Text)) { // если слово есть,  то
  Memo1->SetFocus(); // задать фокус на Memo (иначе не увидишь :) )
  Memo1->SelStart = StartPos + SearchArea.Pos(Edit1->Text)-1-CheckBox1->Checked; // начальная позиция
  Memo1->SelLength = Edit1->Text.Length(); // длина выделения
 }


На форме должен быть Edit - искомое слово, CheckBox - искать с курсора и Memo - нужный текст

А как сделать такой же поиск, только если в memo несколько слов одинаковых, как (найти)выделить по-очереди?
PM MAIL   Вверх
artsb
Дата 25.11.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Zorki @  25.11.2011,  21:53 Найти цитируемый пост)
int StartPos = 0; // начальная позиция поиска

Комментарий вам ни о чём не говорит?

Кстати, этот код лучше не использовать для больших текстов.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.