Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по тексту из Edit'ов 
V
    Опции темы
Женько
  Дата 23.7.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята!! Срочно нужна помощь...

Обстоит дело так..
у меня есть, к примеру 8 едитов.
С их помощью я организовываю поиск.
Половина полей носят значение "и", а другая "или"
 т.е:

user posted image

Я не могу написать условие поиска.
Мол, ищи то что я написала в едите1 и в едите2 или то, что в едите 3.
Причем не все поля могут быть заполнены при поиске.
Варианты вроде "&&" и "||" не помогают почему-то.
PM MAIL ICQ   Вверх
Данкинг
Дата 23.7.2009, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Женько @  23.7.2009,  02:51 Найти цитируемый пост)
С их помощью я организовываю поиск.

Код в студию. Может быть, двумя циклами проще: сначала "и", а затем, если не найдено, "или".

Это сообщение отредактировал(а) Данкинг - 23.7.2009, 01:57


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ksili
Дата 23.7.2009, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Наверно в условии с && и || напутали со скобками.
И ещё надо учитывать, что поле едита не пустое.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Женько
Дата 23.7.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот так вот.

Код

for (k=0; k<strings->Count; k++)
 {
 Path=Memo3->Lines->Strings[k];
 if(!FileExists(Path)) continue;
 strings1->LoadFromFile(Path);
  for (int m=0; m<strings1->Count; m++)
   {
   String s=strings1->Strings[m];
    if ((s.Pos(Edit2->Text)) &&
     (s.Pos(Edit3->Text)==true) &&
     (s.Pos(Edit4->Text)==true) &&
     (s.Pos(Edit5->Text)==true) ||
     (s.Pos(Edit6->Text)==true) ||
     (s.Pos(Edit6->Text)==true) ||
     (s.Pos(Edit8->Text)==true) ||
     (s.Pos(Edit9->Text)==true))
       Form2->Memo1->Lines->Add(s);


Но в итоге плучается не то.

Добавлено через 12 минут и 33 секунды
Может есть какой-то вариант сделать не используемые в очередном поиске поля неактивными..
PM MAIL ICQ   Вверх
sawfish
Дата 23.7.2009, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Попробуйте заменить && на & и || на |. И еще, все условия "и" должны быть заключены в одну скобку.
PM MAIL   Вверх
mrbrooks
Дата 23.7.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Женько, твой код взрывает мозг! 
Что ты пытаешься найти в строке? Подстроку или символ?
Почему нельзя использовать метод Find класса TStringList?

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


Новичок



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

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



Попробовала. Ощутимой разницы нет. В Form2->Memo1->Lines нет ни одной строки, даже если забиваю все едиты параметрами.

Добавлено через 3 минуты и 35 секунд
я пытаюсь найти в строке, нечто, что я ввиду в едиты. причем необходимо, что бы была возможность поиска (едит2 и едит3) или (едит2 и едит3 или едит6), или (едит2 или едит6).... ну и тому подобное.
А про взрыв мозга, эт ты, mrbrooks, прав))
PM MAIL ICQ   Вверх
sawfish
Дата 23.7.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот работающий пример на скорую руку. На форме Мемо1 и Мемо2, 8 Едитов и кнопка BGo. Первые четыре едита "и", вторые "или". Сначала проверяется, есть ли значение в Едите, а потом оно ищется в строке из Мемо1. Со второго Едита идет проверка на true, чтобы далее не проверять.
Код

void __fastcall TForm1::BGoClick(TObject *Sender)
{
    Memo2->Clear();
    int iCount=Memo1->Lines->Count;
    for (int i=0; i<iCount; i++)
    {   String sLine=Memo1->Lines->Strings[i];
        bool bYes=false;
        if (!Edit1->Text.IsEmpty())
            bYes=(bool)sLine.Pos(Edit1->Text);
        if (!Edit2->Text.IsEmpty() & bYes)
            bYes=bYes & (bool)sLine.Pos(Edit2->Text);
        if (!Edit3->Text.IsEmpty() & bYes)
            bYes=bYes & (bool)sLine.Pos(Edit3->Text);
        if (!Edit4->Text.IsEmpty() & bYes)
            bYes=bYes & (bool)sLine.Pos(Edit4->Text);
        if (!Edit5->Text.IsEmpty() & bYes)
            bYes=bYes | (bool)sLine.Pos(Edit5->Text);
        if (!Edit6->Text.IsEmpty() & bYes)
            bYes=bYes | (bool)sLine.Pos(Edit6->Text);
        if (!Edit7->Text.IsEmpty() & bYes)
            bYes=bYes | (bool)sLine.Pos(Edit7->Text);
        if (!Edit8->Text.IsEmpty() & bYes)
            bYes=bYes | (bool)sLine.Pos(Edit8->Text);
        if (bYes)
            Memo2->Lines->Add(sLine);
    }
}


Правда, он работает при условии, что значение первого Едита должно быть обязательно.
А, ну и для последних четырех проверку bYes на true не нужно, они же "или"...  smile 

Это сообщение отредактировал(а) sawfish - 23.7.2009, 12:05
PM MAIL   Вверх
Женько
Дата 23.7.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почемуто выдает ошибку.

List index out of bounds (0)

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


Бывалый
*


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

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



В моем примере нет проверки на пустой Мемо1. По-хорошему надо сначало это проверять.
А у Вас источник строк не пустой? Или это мой пример такое выдает?
PM MAIL   Вверх
Женько
Дата 23.7.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



РАзобралась. Спасибо тебе за помошь. Неоценимо))

И еще маленький вопросик...
А если файл  кот я подгрузила и что-то в нем ищу весит в районе 140мб, могут быть портаки из-за этого. Спрашиваю потому, что, когда работаю с гораздо менее весомыми файлами проблем нет.
PM MAIL ICQ   Вверх
sawfish
Дата 23.7.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ого! 140мб - серьезная заява! Проблема может еще возникнуть из-за длины загружаемых строк, возможно, там есть ограничение на длину строки. Но точно не скажу, извини, у меня таких задач не стояло. Может кто из форумчан-корифеев подскажет. Удачи!
PM MAIL   Вверх
Данкинг
Дата 23.7.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Женько @  23.7.2009,  15:47 Найти цитируемый пост)
А если файл  кот я подгрузила и что-то в нем ищу весит в районе 140мб, могут быть портаки из-за этого. 

При таких объёмах ИМХО стоит не грузить файл в Стринглист, а открывать его и искать непосредственно в файле.

Это сообщение отредактировал(а) Данкинг - 23.7.2009, 17:45


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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