Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск слова в Memo, как организовать..подскажите.. 
V
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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