C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Поиск в StringGrid'e
Jess
  Отправлено: 11.02.2005, 22:04


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Приветствую всех....... народ подскажите как сделать поиск в StringGrid.
Тоесть в Edit вводим строку и эта строка сравнивается с каждым значением стринггрида...
Если можно с кодом........

За ранее благодарствую.....
Aptem
Отправлено: 13.02.2005, 11:06


Мастер участка

Группа: Участник
Сообщений: 349



Если речь идет об обычном поиске ячейки грида, то можно так:
CODE
AnsiString pattern;

pattern = Edit1 -> Text;

for ( int i = 0; i < Grid -> RowCount; i++ )
{
 for ( int j = 0; j < Grid -> ColCount; j++ )
 {
   if ( StringGrid1 -> Cells[j][i] == pattern )
   {
     //какие-либо действия при нахождении шаблона
   }
 }
}


...если речь идет о поиске вхождения (не строгий поиск), то условия поиска можно написать так:
CODE
if ( StringGrid1 -> Cells[j][i].Pos ( pattern ) )
Jess
  Отправлено: 13.02.2005, 15:33


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Тём спасибо...всё ищется, только проблема в следующем...
Этот код читает из файла данные и вбивает их в стринггрид..
CODE

char string[256];
int i=0,k=0;

StringGrid1->RowCount=4;
StringGrid1->ColCount=4;

FILE *f=fopen("file.txt","rt");
while (!feof(f)) {
fgets(string,255,f);
StringGrid1->Cells[i][k]=AnsiString(string);
i++;
if(i>=4){
i=0;
k++;}
}
fclose(f);

потом функция поиска ищет в ячейках строку.
Проблема в том, что значения в стриггриде видятся с пайпом в конце....
1. Как убрать эти пайпы(в пхп есть функция trim, как на счет билдера)?
2. Из-за этих пайпов, поиск на прямое совпадание (if ( StringGrid1 -> Cells[j][b] == pattern)) НЕ работает...
Последний стринг без пайпа видится в стринггриде, и всё ищется путём...
Если сможешь опиши как бороться с этими проблемами...

За ранее сенкс.....

Отредактировано Jess — 13/02/2005, 16:36
Aptem
Отправлено: 14.02.2005, 05:52


Мастер участка

Группа: Участник
Сообщений: 349



Также как и в PHP, в C++ Builder у класса AnsiString есть методы: Trim, TrimLeft, TrimRight.

Соответственно, перед вводом данных в грид делаешь такое:
CODE
StringGrid1->Cells[i][k]=AnsiString(string).Trim ();


А вообще, если дальше собираешься плотно работать с гридами, то советую использовать TAdvStringGrid от TMSSoftware. Там уйма всяких наворотов, которые отсутствуют у обычного TStringGrid.

Если не найдешь в инете могу послать на почту.
Stan
Отправлено: 14.02.2005, 11:24


Не зарегистрирован







QUOTE (Aptem @ 14/02/2005, 06:54)
А вообще, если дальше собираешься плотно работать с гридами, то советую использовать TAdvStringGrid от TMSSoftware. Там уйма всяких наворотов, которые отсутствуют у обычного TStringGrid.

Если не найдешь в инете могу послать на почту.

Aptem, а какая у тебя версия TAdvStringGrid'a и есть ли у Тебя на него кряк?
Aptem
Отправлено: 14.02.2005, 12:16


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Stan @ 14/02/2005, 12:26)
Aptem, а какая у тебя версия TAdvStringGrid'a и есть ли у Тебя на него кряк?

Версия грида 2.02 (она еще freeware), но есть и самая последняя, но без кряка
Jess
  Отправлено: 14.02.2005, 22:14


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Спасибо...разчехлился...smile.gif
cybavat@list.ru сюда можно прислать стринггрид(advanced)...
Слушай, был у них на сайте так там всё за баксюки...Хочу сделать красивое MainMenu, стандартный не устраивает...
Может посоветуешь портальчики где можно найти как на www.tmssoftware.com компоненты для так сказать разширения билдера...

Ещё раз сенкс..........................smile.gif
Aptem
Отправлено: 15.02.2005, 06:37


Мастер участка

Группа: Участник
Сообщений: 349



Вплотную меню не занимался, но посмотри вот здесь:
http://www.torry.net/pages.php?s=78&SID=8c...3e391951fb80f00
MrSpawn
Отправлено: 16.02.2005, 15:59


Не зарегистрирован







Артем а мне не кинеш TAdvStringGrid rjnjhsq фрееваре жумаю и его функций и возможностей за глаза хватает... -
на почту если не трудно то spawnns@yandex.ru
L.u.M.
Отправлено: 20.11.2006, 14:25


Ученик-кочегар

Группа: Участник
Сообщений: 28



Aptem, написал код очень похожий на ваш и заметил, что и у вас показывается только последний результат!
Как же сделать, чтобы и остальные строки выделялись в таблице(StringGrid1->Row = n; //где n — номер строки)?

Вернуться в Вопросы программирования в C++Builder