Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Андрей1743

Поиск в StringGrid

07.12.2012, 01:29. Показов 2844. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Тему создал новую, так как все остальные перешарил по данному вопросу, и ничего конкретного не нашел.

Я сделал програму, она загружает текст с екселя в StringGrid, но нужно еще настроить поиск по ячейкам и найти, где записана одна литера "н". И, если есть, то как-то виделить адрес ячейки.

Могу дать исходники.

P.S. Извините за ошибки, просто не удобно писать по-русски. Я с Украины.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2012, 01:29
Ответы с готовыми решениями:

Поиск перебором или бинарный поиск в StringGrid
как реализовать поиск в stringgrid (поиск перебором или бинарный поиск)? напр.задаешь в edit.text что искать и stringgrid выводит только...

Поиск в Stringgrid и вывод строк в новый Stringgrid
Привет. Наверное этот вопрос задавался уже много раз, но я не могу никак понять: 1. У меня есть Stringgrid в нем содержатся записи: фио,...

Что лучше реализовать - поиск по stringgrid или поиск по источнику его данных (txt)
здравствуйте, нужно в программу добавить функцию поиска, данные из stringgrid хранятся в txt файле и подгружаются в таблицу, посоветуйте...

3
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.12.2012, 17:24

Не по теме:

LK, чего за прикол с ценностью исходняков, зацензурил и себе забрал? :D


Делаешь пару циклов для прохода по всем ячейкам, в каждой смотришь strgrid->Cells[i][j].Pos("н") и сохраняешь, если есть совпадение, текущие индексы i, j - вот весь адрес ячейки.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.12.2012, 18:16
У структуры типа "список" имеется подходящий для такой задачи метод IndexOf. Вот пример использования__
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     for (int num,cc=0;cc<StringGrid1->ColCount;cc++)
       if ((num=StringGrid1->Cols[cc]->IndexOf("í"))>=0)  {
         Label1->Caption = "Ñòðîêà: "+IntToStr(num);
         Label2->Caption = "Ñòîëáåö: "+IntToStr(cc);
       }
}
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
09.12.2012, 00:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
////////////////////////////////////////////////////////////////////////////////
//                       Edit1
//           программа поиска в базе
//
//##############################################################################
//и создать событие Edit1->Events->OnEnter = Edit1Change и EditOnEnter
// как только ативируеш окно едита то если есть слово - то его сразу ищет снова
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void __fastcall TForm2::Edit_searchChange(TObject *Sender)//##########################
//##############################################################################
////////////////////////////////////////////////////////////////////////////////
// ввод поиска                                                                //
////////////////////////////////////////////////////////////////////////////////
{
    
    if (searchenter == true) return;//если был запрет на мгновенный поиск
 
   Memo_abonat_info->Lines->Clear ();//очистка поля описание в окошке
   Panel_info_mesto->Visible = false;          //закрываю панель с описанием места
   Foto_Panel->Visible = false;      //закрываю фото панель
 
  int z = 0; // установка счетчика количества найденных строк
  AnsiString ttext,// здесь будет хранится текст из [колонка] [строка]
  adr="", filtr="";// здесь фильтр для локализации поиска
 
// если включен фильтр добавить адрес к поиску .................................
  if (SpeedButton_filtr->Hint == "Filtr OFF") {filtr = ComboBox_ret_basa->Text;
  if (filtr == " Избери адреса за филтриране")filtr="";}//если не выбран фильтр
//..............................................................................
  AnsiString vr; // создаю переменную
// если включен фильтр и в поле поиска ввести ** поиск будат по слову из фильтра
  if (Edit_search->Text >= "**" && Edit_search->Text <= "***")Edit_search->Text = "**";
  //............................................................................
  AnsiString etext=Edit_search->Text.LowerCase(); // запись искомого слова в etext
  if (Edit_search->Text == "**")etext = filtr.LowerCase();
  int etlength=etext.Length(); // определение колличества букв в слове etext
  if (etext!="" && etlength>1) // здесь ограничение ошибочного поиска по пустой строке и по 1 символу
  {
                    StringGrid1 ->Row = 0; // установка курсора
                    StringGrid1 ->Col = 1; // на верхней строке
  
   for (int k = 1; k < StringGrid1 -> ColCount-5; k++)//поиск в колонках "-" невидимые строки (чтоб там не искать)
   for (int i = 0; i < StringGrid1 -> RowCount; i++) // поиск по строкам начиная с 0 строки
        {
        ttext=StringGrid1->Cells[k][i].LowerCase(); // [колонка] [строка] поиск только в строке записываю целую строку в память
           for (int j = 1; (j+etlength-1) <= ttext.Length(); j++)  //
                   {  vr="";       //обнуление   //
                   for (int a=j;a<(j+etlength);a++)//
                           vr=vr+ttext[a];
//..............................................................................
if  (filtr !="")// если задан фильтр 
{ TStringList *tmp_filtr = new TStringList;
adr = StringGrid1->Cells[1][i];//записываю в переменную адрес
if (adr!="") 
//          
            {
adr = StringReplace(adr, ",", "\r\n", TReplaceFlags() << rfReplaceAll);
 tmp_filtr->Text = adr;//запись 2-х строк в стринглист
 tmp_filtr->Text = tmp_filtr->Strings[0];//отделяю первую строку с адресом
adr = tmp_filtr->Text;// и запоминаю
adr = StringReplace(adr, "\r\n" ,"", TReplaceFlags() << rfReplaceAll);
            }
delete tmp_filtr;
}  // ShowMessage (filtr);
//..............................................................................                           
                          if (etext==vr && adr==filtr)  // если слово найдено
                                 { StringGrid1 ->Row = i; // отмечает найденную строку
                                  //      if (k>0) { StringGrid1 ->Col = k;}
     /////////////////// здесь программа перемещения найденых строк вверх ///////////
         int row = StrToInt (StringGrid1->Row); //  строка на которой стоит курсор
         const int row_count =  StringGrid1->RowCount;
 
//------------ создаю новую "временную" строку использую как буффер ---------
         StringGrid1->RowCount = row_count +1;
// --------------------------- Смещаем строки вверх ------------------------
        for ( int m =row; m > 0; m-- )
//--- здесь надо сохранить верхнюю строку и потом ее поменять местоми с нижней
        {
             StringGrid1->Rows [row_count +1] = StringGrid1->Rows[m-1];
//---------- перемещение строки вверх-----------------
             StringGrid1->Rows[m-1] = StringGrid1->Rows[m];
             StringGrid1->Rows [m] = StringGrid1->Rows [row_count +1];
//..............................................................................
//перезаписываю изменения чтоб не появлялось сообщение об изменении текста
No_indicate_chenge_text(0);
//..............................................................................
        }
//---------- очистка буффера и удаление "временной" строки ---------------------
             StringGrid1->Rows[ row_count + 1]->Clear();// очистка последней строки
             StringGrid1->RowCount = row_count;// запись количества строк
             StringGrid1 ->Row = 0;//установка курсора на первую строку
             // на верхней строке и на 1 колонке
             StringGrid1 ->Col = 1;//(чтоб не появлялась панель с информацией о месте)
//------- и выделение всех найденых строк -----------------------------------
        TGridRect rect;
        rect.Top = z;  // количество столбцов по вертикали для закраски
        rect.Left = 0; // количество столбцов по горизонтали для закраски
        rect.Right = 3; // количество столбцов по горизонтали для закраски
        rect.Bottom = 0; // количество столбцов по вертикали для закраски
        StringGrid1->Selection = rect;
        z = z++;                         }
                   }
        }
  }
 find_and->Caption = z;// вывод на экран количества найденных строк
 
 if (Search_ico->Hint =="Търси") searchenter = true;    
}//.......................... конец прграммы поиска ............................
//------------------------------------------------------------------------------
Добавлено через 4 минуты
тебе собственно нужна часть програмки начинающиеся со строки 30
кроме того там и есть как отметить найденные строки.
я там сделал два режима поиска 1: начинается сразу по мере набора текста. 2: сначала вводишь слово а потом при нажатии на ентер начинается поиск.
еще я там и реализовал поиск по маске. но там отдельный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2012, 00:32
Помогаю со студенческими работами здесь

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы Stringgrid2 На рис всё показано. За работающий...

StringGrid и поиск
Есть массив из 2 столбцов-зависимость давления от времени. Далее у нас есть время. Как, зная это время, определить соответствующее ему...

поиск по stringgrid
всем привет! подскажите, как сделать поиск по таблице stringgrid. надо чтобы при нажатии на кнопку поиск открылась новая форма со всеми...

Поиск в StringGrid
Добрый день! Подскажите, пожалуйста, как сделать поиск данных в StringGrid через Edit

Поиск по StringGrid
Друзья, добрый вечер! Подскажите - имеется StringGrid, в нем строк 200. Нужно организовать поиск по содержимому ячеек (содержание может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru