Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.86.184] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте. Из xls файла загружаю в ListBox некий (достаточно большой) список. Далее в Edit ввожу подстроку. Можно ли организовать некий поиск в ListBox по подстроке. Использовать ListBox не обязательно, можно что-то другое, лишь бы данные отображались и их можно было выделить. Переводить данные в нормальную БД не стоит, т.к. в целом задача не большая.
|
Сообщ.
#2
,
|
|
|
Подстрока - с начала строки? Тогда можно SendMessage(LBHandle, LB_FINDSTRING, -1, (LPARAM)substring)
Иначе - только тупым перебором и strstr() или подобной |
Сообщ.
#3
,
|
|
|
ListBox->Items->Strings - ищи че хочешь.
|
Сообщ.
#4
,
|
|
|
Цитата shm @ ListBox->Items->Strings Получается все строки перебрать надо? |
Сообщ.
#5
,
|
|
|
Цитата AnsiString::AnsiPos AnsiString See also Returns the index at which the specified substring begins. int __fastcall AnsiPos(const AnsiString& subStr) const; Description Returns the index in the AnsiString at which the substring subStr begins, where 1 is the first character in the string, 2 is the second character, and so on. If the substring is not contained in the AnsiString, Pos returns 0. This member function is the same as Pos but supports multibyte character strings. Note: See ByteType for more information about multibyte characters. Добавлено Цитата sten_11 @ Получается все строки перебрать надо? Да. Но если загнать в Мемо то весь текст. А не проще при загрузке из xls фильтровать нужное? |
Сообщ.
#6
,
|
|
|
Цитата Bas @ А не проще при загрузке из xls фильтровать нужное? Нет. Я хотел реализовать что-то типа: void __fastcall TForm1::Edit1Change(TObject *Sender) { POISK = Edit1->Text.Trim(); ... select *from table where param like(%POISK %); } |
Сообщ.
#7
,
|
|
|
Создаем второй ListBox2
void __fastcall TForm1::Edit1Change(TObject *Sender) { int i=0; ListBox *LName; LFind= new ListBox(); while (i<ListBox1->Items->Count) { if (ListBox1->Items->Strings.AnsiPos( Edit1->Text.Trim())>=0) LFind->Items->Add(ListBox1->Items->Strings[i]) i++; } //select *from table where param like(%POISK %); } Что то типа? Не забудем удалить после new. |
Сообщ.
#8
,
|
|
|
Цитата sten_11 @ select *from table where param like(%POISK %); Такое средствами ListBox не сделать. Однако, можно поробовать открыть твою таблицу через ADO, а там есть и SQL и DBListBox. |
Сообщ.
#9
,
|
|
|
select *from table where param like(%POISK %); Я так понимаю это вообще команда к SQL, причем тут ListBox ???? |
Сообщ.
#10
,
|
|
|
void __fastcall TForm1::Edit1Change(TObject *Sender) { for(int i = 0; i < ListBox1->Items->Count; i++) { if (ListBox1->Items->Strings.AnsiPos(Edit1->Text.Trim())>=0) { ListBox1->ItemIndex = i; break; } } } |
Сообщ.
#11
,
|
|
|
Цитата Dem_max @ Я так понимаю это вообще команда к SQL, причем тут ListBox ???? Дело в том, что я не хочу в рамках этой задачи связываться с БД. Просто на БД я бы использовал скрипт, а тут мне надо реализовать его аналог. |
Сообщ.
#12
,
|
|
|
ListBox1-исходные данные, невидимый
ListBox2-результат выборки, видимый void __fastcall TForm1::Edit1Change(TObject *Sender) { int i=0; ListBox2->Items->Clear(); while (i<ListBox1->Items->Count) { if (ListBox1->Items->Strings.AnsiPos( Edit1->Text.Trim())>=0) ListBox2->Items->Add(ListBox1->Items->Strings[i]) i++; } |
Сообщ.
#13
,
|
|
|
Цитата Bas @ Создаем второй ListBox2 Это идея. Попробовал так, но не вышло. void __fastcall TForm1::Edit1Change(TObject *Sender) { ListBox2->Clear(); int i=0; while (i<ListBox1->Items->Count) { if (ListBox1->Items->Strings[i].AnsiPos( Edit1->Text.Trim())>=0) ListBox2->Items->Add(ListBox1->Items->Strings[i]); i++; } } Создается второй список полностью аналогичный первому. |
Сообщ.
#14
,
|
|
|
а слона-то никто и не заметил. AnsiPos возвращает > 0, если находит
|
Сообщ.
#15
,
|
|
|
Цитата Relaxander @ а слона-то никто и не заметил да ни кто и не смотрел... вроде автора перебор не устраивал, а теперь вроде поменял мнение. |