Stringgrid delphi как найти

На форме имеется компонент StringGrid со значениями (данные вбиваются прямо в компоненте, никакой БД нету). Имеется поле Edit и кнопка. Необходимо осуществить поиск по первой колонке. Т.е. найти в первой колонке все значения соответствующие значению в Edit. Может кто подсказать, как это реализовать? В PHP я это сделал а вот Delphi давно не занимался, подзабыл как это делать.

Deleted's user avatar

Deleted

3611 золотой знак5 серебряных знаков13 бронзовых знаков

задан 3 июл 2012 в 17:07

new_russian_man's user avatar

new_russian_mannew_russian_man

8491 золотой знак27 серебряных знаков67 бронзовых знаков

у стринг грида есть свойства Cells ,Col, Row, aCol, aRow, ColMax и RowMax, ими и нужно оперировать в данном случае.

Делаете простой цикл for i:= 0 to RowMax — 1 do, и в теле цикла пробегаете каждую строчку и сравниваете ее со значением в Едит: if StringGrid1.Cells[MyCol, i] = Edit1.text then.

ответ дан 3 июл 2012 в 20:32

teanЫЧ's user avatar

Если искать нужно только в первой колонке, то используйте

i:=StringGrid1.Cols[0].IndexOf(Edit1.Text);

Это вернет либо номер строки, где совпало, либо -1

cyadvert's user avatar

cyadvert

7,0171 золотой знак16 серебряных знаков31 бронзовый знак

ответ дан 1 окт 2015 в 21:17

user191797's user avatar

>
Поиск в StringGrid
, не такой, как обычно

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
07.12.04, 16:45

    Вообщем есть edit и кнопка. По нажатию на кнопку нужно искать текст из edit’a по всем ячейкам StringGrid, и при нахождении таковой — выделять строку, содержащую эту ячейку. При повторном нажатии кнопки нужно продолжать поиск, а не начинать его сначала. Поиск должен быть без учета регистра, не обязательно точное совпадение, сверху вниз и при достижении конца StringGrid’a начинать сначала.
    Например: ищем текст ‘кОМпьЮ’ — должна найтись строка, содержащая ячейку ‘Компьютер’. Надеюсь вам понятно и вы мне поможите.


    Song



    Сообщ.
    #2

    ,
    07.12.04, 17:06

      Уже такое было, я даже коду постил вроде.


      Kostas



      Сообщ.
      #3

      ,
      08.12.04, 12:48

        что то не нашел я ничего…


        s-mike



        Сообщ.
        #4

        ,
        08.12.04, 13:01

          Kostas используй AnsiPos:

          Цитата

          function AnsiPos(const Substr, S: string): Integer;

          Description

          Call AnsiPos to obtain the byte offset of the Substr parameter, as it appears in the string S. For example, if Substr is the string «AB», and S is the string «ABCDE», AnsiPos returns 1. If Substr does not appear in S, AnsiPos returns 0.


          Kostas



          Сообщ.
          #5

          ,
          08.12.04, 16:48

            вот мой код:

            ExpandedWrap disabled

              procedure TForm1.Button2Click(Sender: TObject);

              Var i,j:integer;

              begin

                For i:=0 To StringGrid1.ColCount-1 Do

                 For j:=0 To StringGrid1.RowCount-1 Do

                  if pos(AnsiUpperCase(Edit3.Text), AnsiUpperCase(StringGrid1.Cells[i,j]))>0 then

                   begin

                    StringGrid1.Row:=j;

                    StringGrid1.Col:=i;

                    Exit;

                   end;

              end;

            Все правильно ищется, но вот как сделать так, чтобы при повторном нажатии кнопки поиск продолжадся, а не начинался сначала.. уже все варианты перепробовал :wall:


            Curve



            Сообщ.
            #6

            ,
            08.12.04, 18:15

              Full Member

              ***

              Рейтинг (т): 22

              Kostas, сохраняй i и j в отдельные глобальные переменные — i1 и j1 (для начала присвой им по нулю). тогда у тебя получится:

              ExpandedWrap disabled

                procedure TForm1.Button2Click(Sender: TObject);

                Var i,j:integer;

                begin

                  For i:=i1 To StringGrid1.ColCount-1 Do

                   For j:=j1 To StringGrid1.RowCount-1 Do

                    if pos(AnsiUpperCase(Edit3.Text), AnsiUpperCase(StringGrid1.Cells[i,j]))>0 then

                     begin

                      StringGrid1.Row:=j;

                      StringGrid1.Col:=i;

                      i1:=i;

                      j1:=j;

                      break;

                     end;

                //Если поиск закончен (или ничего не найдено) обнуляем переменные

                 i1:=0;

                 j1:=0;

                end;


              Song



              Сообщ.
              #7

              ,
              08.12.04, 18:15

                Kostas, запоминай позиции, на которых поиск остановился.


                Kostas



                Сообщ.
                #8

                ,
                09.12.04, 09:15

                  хм.. я так пробовал, но у меня не получилось :) Видимо дело в break. Я выходил из цикла, используя exit. Попробую такой вариант, может прокатит


                  Song



                  Сообщ.
                  #9

                  ,
                  09.12.04, 10:20

                    Kostas, правильно. Делай хоть break, хоть Exit без разницы, если тебе нужно просто из цикла выйти. А потом после того как юзер нажмёт кнопку «Продолжить поиск» снова запускай свои циклы, начиная с переменных, которые ты запомнил.


                    Kostas



                    Сообщ.
                    #10

                    ,
                    09.12.04, 10:51

                      Не работает.. Слушайте, а как выделить несколько ячеек StringGrid’a? Может лучше мне за один раз все найденные ячейки выделять и не парится?

                      Добавлено 09.12.04, 10:53
                      Может я чего-то неправильно делаю.. можете кинуть исходничек с реализацией этого поиска?


                      s-mike



                      Сообщ.
                      #11

                      ,
                      09.12.04, 10:56

                        Цитата Kostas,9.12.04, 13:51 @ 07.01.70, 05:19

                        Слушайте, а как выделить несколько ячеек StringGrid’a?

                        ExpandedWrap disabled

                          procedure TForm1.Button1Click(Sender: TObject);

                          var

                            myRect: TGridRect;

                          begin

                            myRect.Left := 3;

                            myRect.Top := 1;

                            myRect.Right := 2;

                            myRect.Bottom := 4;

                            DrawGrid1.Selection := myRect;

                          end;

                        Взято из дельфийского хелпа.


                        _Art



                        Сообщ.
                        #12

                        ,
                        09.12.04, 18:56

                          Senior Member

                          ****

                          Рейтинг (т): 14

                          Вопрос «вдогонку»: а как выделить ячейки в разных местах TStringGrid, например высвятить сразу все совпадения поиска? Спасибо


                          Song



                          Сообщ.
                          #13

                          ,
                          09.12.04, 18:59

                            Art4, Только если отрисоавывать «выделение» самому.


                            J. Bravo



                            Сообщ.
                            #14

                            ,
                            10.12.04, 00:05

                              Цитата Curve,8.12.04, 21:15 @ 07.01.70, 05:09

                              ExpandedWrap disabled

                                procedure TForm1.Button2Click(Sender: TObject);

                                Var i,j:integer;

                                begin

                                  For i:=i1 To StringGrid1.ColCount-1 Do

                                   For j:=j1 To StringGrid1.RowCount-1 Do

                                    if pos(AnsiUpperCase(Edit3.Text), AnsiUpperCase(StringGrid1.Cells[i,j]))>0 then

                                     begin

                                      StringGrid1.Row:=j;

                                      StringGrid1.Col:=i;

                                      i1:=i;

                                      j1:=j;

                                      break;

                                     end;

                                //Если поиск закончен (или ничего не найдено) обнуляем переменные

                                 i1:=0;

                                 j1:=0;

                                end;

                              1. Правильно будет не j1:=j; а j1:=j + 1;. Иначе мы будем всегда находить одно и то же значение.
                              2. И ещё после каждого прохода внутреннего цикла нужно обнулять j1.

                              ExpandedWrap disabled

                                procedure TForm1.Button2Click(Sender: TObject);

                                Var i,j:integer;

                                begin

                                  For i:=i1 To StringGrid1.ColCount-1 Do

                                  begin

                                   For j:=j1 To StringGrid1.RowCount-1 Do

                                    if pos(AnsiUpperCase(Edit3.Text), AnsiUpperCase(StringGrid1.Cells[i,j]))>0 then

                                     begin

                                      StringGrid1.Row:=j;

                                      StringGrid1.Col:=i;

                                      i1:=i;

                                      j1:=j+1;//Вместо j1:=j

                                      break;

                                     end;

                                    j1:=0;//Чтобы искать во всем следующем столбце, а не в куске от j1 до конца

                                  end;

                                 i1:=0;

                                end;

                              Сообщение отредактировано: J. Bravo — 10.12.04, 00:08


                              Kostas



                              Сообщ.
                              #15

                              ,
                              10.12.04, 19:35

                                в общем помучавшись я все же добился желаемого результата, однако он меня не устроил. Решил свою проблему совсем по другому: создал вторую форму, а на ней другой СтрингГрид для результатов поиска. Если кому интересно, то вот рабочий код для такого поиска (в ФАКе нету):

                                ExpandedWrap disabled

                                  procedure TForm1.Button2Click(Sender: TObject);

                                  Var i,j,g:integer;

                                  begin

                                  For j:=1 To Form2.StringGrid1.ColCount-1 Do

                                   For i:=1 To Form2.StringGrid1.RowCount-1 Do

                                    Form2.StringGrid1.Cells[j,i]:=»;

                                  Form2.StringGrid1.RowCount:=2;

                                  g:=0;

                                  For i:=0 To StringGrid1.ColCount-1 Do

                                   For j:=0 To StringGrid1.RowCount-1 Do

                                    if pos(AnsiUpperCase(Edit3.Text), AnsiUpperCase(StringGrid1.Cells[i,j]))>0 then

                                     begin

                                      g:=g+1;

                                      Form2.StringGrid1.Rows[g].Assign(StringGrid1.Rows[j]);

                                      Form2.StringGrid1.RowCount:=Form2.StringGrid1.RowCount+1;

                                     end;

                                  //Показываем результаты поиска

                                  Form2.StringGrid1.RowCount:=Form2.StringGrid1.RowCount-1;

                                  Form2.StringGrid1.Rows[0].Assign(StringGrid1.Rows[0]);

                                  if Form2.StringGrid1.RowCount>1 then

                                   Form2.Show

                                  else

                                   begin

                                    Form2.StringGrid1.RowCount:=2;

                                    Form2.StringGrid1.FixedRows:=1;

                                    ShowMessage(‘Ничего не найдено!’);

                                   end;

                                  end;

                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                0 пользователей:

                                • Предыдущая тема
                                • Delphi: Общие вопросы
                                • Следующая тема

                                [ Script execution time: 0,0700 ]   [ 16 queries used ]   [ Generated: 27.05.23, 08:50 GMT ]  

                                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
                                110
                                111
                                112
                                113
                                114
                                115
                                116
                                117
                                118
                                119
                                120
                                121
                                122
                                123
                                124
                                125
                                126
                                127
                                128
                                129
                                130
                                131
                                132
                                133
                                
                                unit Unit1;
                                 
                                interface
                                 
                                uses
                                  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                  Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, DB;
                                 
                                type
                                  TForm1 = class(TForm)
                                    SG1: TStringGrid;
                                    Label1: TLabel;
                                    Edit1: TEdit;
                                    Button1: TButton;
                                    SG2: TStringGrid;
                                    procedure FormCreate(Sender: TObject);
                                    procedure Button1Click(Sender: TObject);
                                 
                                  private
                                    { Private declarations }
                                  public
                                    { Public declarations }
                                  end;
                                 
                                var
                                  Form1: TForm1;
                                 
                                implementation
                                 
                                {$R *.dfm}
                                 
                                 
                                procedure TForm1.FormCreate(Sender: TObject);
                                  var
                                  i : integer;
                                begin
                                  for i := 1 to 14 do
                                  begin
                                    SG1.Cells[0, i] := IntToStr(i);
                                    SG1.Cells[0, 0] := 'Номер';
                                    Sg1.Cells[1, 0] := 'Фамилия';
                                    SG1.Cells[2, 0] := 'Имя Отчество';
                                    SG1.Cells[3, 0] := 'Стаж';
                                    SG1.Cells[4, 0] := 'Образование';
                                 
                                    SG1.Cells[1, 1] := 'Рассказова';
                                    SG1.Cells[1, 2] := 'Блинков';
                                    SG1.Cells[1, 3] := 'Наумов';
                                    SG1.Cells[1, 4] := 'Семенов';
                                    SG1.Cells[1, 5] := 'Крошечкина';
                                    SG1.Cells[1, 6] := 'Рубинов';
                                    SG1.Cells[1, 7] := 'Селиверстов';
                                    SG1.Cells[1, 8] := 'Драгунов';
                                    SG1.Cells[1, 9] := 'Ивашков';
                                    SG1.Cells[1, 10] := 'Тарасов';
                                 
                                    SG1.Cells[2, 1] := 'Елена Геннадьевна';
                                    SG1.Cells[2, 2] := 'Семен Аркадьевич';
                                    SG1.Cells[2, 3] := 'Александр Андреевич';
                                    SG1.Cells[2, 4] := 'Николай Олегович';
                                    SG1.Cells[2, 5] := 'Инна Николаевна';
                                    SG1.Cells[2, 6] := 'Роман Петрович';
                                    SG1.Cells[2, 7] := 'Михаил Анатольевич';
                                    SG1.Cells[2, 8] := 'Игорь Николаевич';
                                    SG1.Cells[2, 9] := 'Сергей Владимирович ';
                                    SG1.Cells[2, 10] := 'Павел Аркадьевич';
                                 
                                    SG1.Cells[3, 1] := '9';
                                    SG1.Cells[3, 2] := '5';
                                    SG1.Cells[3, 3] := '7';
                                    SG1.Cells[3, 4] := '6';
                                    SG1.Cells[3, 5] := '4';
                                    SG1.Cells[3, 6] := '2';
                                    SG1.Cells[3, 7] := '8';
                                    SG1.Cells[3, 8] := '5';
                                    SG1.Cells[3, 9] := '3';
                                    SG1.Cells[3, 10] := '7';
                                 
                                    SG1.Cells[4, 1] := 'высшее';
                                    SG1.Cells[4, 2] := 'среднее';
                                    SG1.Cells[4, 3] := 'высшее';
                                    SG1.Cells[4, 4] := 'высшее';
                                    SG1.Cells[4, 5] := 'среднее';
                                    SG1.Cells[4, 6] := 'высшее';
                                    SG1.Cells[4, 7] := 'высшее';
                                    SG1.Cells[4, 8] := 'среднее';
                                    SG1.Cells[4, 9] := 'высшее';
                                    SG1.Cells[4, 10] := 'высшее';
                                 
                                    SG2.Cells[0, i] := IntToStr(i);
                                    SG2.Cells[0, 0] := 'Номер';
                                    SG2.Cells[1, 0] := 'Фамилия';
                                    SG2.Cells[2, 0] := 'Имя Отчество';
                                    SG2.Cells[3, 0] := 'Стаж';
                                    SG2.Cells[4, 0] := 'Образование';
                                 
                                 
                                end;
                                end;
                                 
                                 
                                procedure TForm1.Button1Click(Sender: TObject);
                                var
                                  S : TStrings;
                                  St : String;
                                  i, Row, Col : Integer;
                                begin
                                  //Индекс столбца, в котром будем проводить поиск.
                                  Col := 0;
                                 
                                  St := AnsiUpperCase( '<Искомый шаблон>' );
                                  S := SG1.Cols[Col];
                                  Row := -1;
                                  for i := SG1.FixedCols to S.Count - 1 do begin
                                    if Pos( St, AnsiUpperCase( S.Strings[i] ) ) > 0 then begin
                                      Row := i;
                                      Break;
                                    end;
                                  end;
                                 
                                  if Row > -1 then begin
                                    //Делаем так, чтобы найденная строка оказалась верхней видимой строкой.
                                    SG1.TopRow := Row;
                                    //Выделяем найденную ячейку.
                                    SG1.Selection := TGridRect( Rect(Col, Row, Col, Row) );
                                 
                                    ShowMessage('Шаблон найден в строке с индексом: ' + IntToStr(Row));
                                  end else begin
                                    ShowMessage('Шаблон не найден.');
                                  end;
                                end;
                                 
                                end.

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

                                За ранее благодарствую…..

                                2 ответа

                                Цитата:

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

                                За ранее благодарствую…..

                                Доступ к ячейке StringGrid1->Cells[номер_столбца][номер строки]

                                Код:

                                bool found = false;
                                for(int i = 0;i < StringGrid1->ColCount;i++)
                                {
                                   for(int j = 0;j < StringGrid1->RowCount;j++)
                                      if(StringGrid1->Cells[j] == Edit1->Text)
                                      {
                                          //нашли то че нужно
                                          found = true;
                                          break;
                                      }
                                   if(found) break;
                                }

                                496

                                14 февраля 2005 года

                                Jes

                                81 / / 28.03.2003

                                Цитата:

                                Originally posted by AlexandrVSmirno

                                Доступ к ячейке StringGrid1->Cells[номер_столбца][номер строки]

                                Код:

                                bool found = false;
                                for(int i = 0;i < StringGrid1->ColCount;i++)
                                {
                                   for(int j = 0;j < StringGrid1->RowCount;j++)
                                      if(StringGrid1->Cells[j] == Edit1->Text)
                                      {
                                          //нашли то че нужно
                                          found = true;
                                          break;
                                      }
                                   if(found) break;
                                }

                                .уже сделал..но всё равно сенкс…:)

                                fredi5


                                Здравствуйте все.
                                Подскажите. Есть StringGrisd из 500 строк, с метками на определенных строках.
                                Как мне по метке вывести, соответствующую строку, первой в окне просмотра.


                                Записан
                                RXL

                                Технический
                                Администратор

                                ru
                                Offline Offline
                                Пол: Мужской

                                WWW


                                Можно добавить столбец и задать ему нулевую ширину. В этом столбце расположить данные, по которым будет производится сортировка. Идея такая.


                                Записан

                                … мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

                                fredi5


                                Я не  совсем точно указал задачу. Первоначально в StringGrid из txt-файла загружается вся таблица.
                                Потом в обработчике события нажатия кнопки выдается команда на вывод данных от метки «Х» до метки «Y».
                                Прочитал много про сортировку, но ничего нужного не обнаружил. Нужно как-то или очистить таблицу ДО и
                                ПОСЛЕ меток, или перенести выделенный диапазон строк в другой StringGrid. Подскажите плз. хоть
                                направление, в котором есть нужное решение. Про код и не заикаюсь…  Возможно, через какое-то время
                                я и сам смогу решать подобные задачи. Но сейчас, как и многие здесь, черпаю знания из конференций.


                                Записан
                                zubr

                                Гость


                                1. Перенос строк от X до Y в начало таблицы:

                                For i:=0 to Y-X do
                                StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+X] );

                                2. Урезание таблицы до количества строк Y-X+1:

                                StringGrid1.RowCount := Y-X+1;


                                Записан
                                fredi5


                                Присваиваю переменным числовые значения меток. Не фурычит, ругается..
                                » For loop control variable must have ordinal type «

                                    procedure TForm1.Button2Click(Sender: TObject);
                                 var  Y , X, i  : string ;
                                 begin
                                Y := ‘005’ ;
                                X := ‘004’ ;
                                 For i:= 0 to Y-X do
                                StringGrid1.Rows.Assign(StringGrid1.Rows[i+X] );
                                end;
                                И при урезании таблицы тоже ругает.


                                Записан
                                SEA


                                Во первых, Чего это ты ассигнешь Массив Rows с элементом этого массива? Тут точно будет материться.
                                Во вторых —
                                var Y,X,I: string; !!!! Ты что! Они должны быть integer;
                                Цикл не работает, присваивание не работает…


                                Записан

                                почувствуй радость творческих мук!

                                zubr

                                Гость


                                1.

                                StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+X]);

                                и

                                StringGrid1.Rows.Assign(StringGrid1.Rows[i+X]);

                                это 2 большие разницы, как говорят в Одессе.
                                2. Исходя из твоего описания, я понял, что метки — это индексы строк, а не какие то текстовые значения. Подставлять вместо индексов строки — это конечно грубейшая ошибка. Надо бы почитать учебник по паскалю. В твоем случае, надо определить индексы строк соответствующих меткам и уже в код подставлять не значения меток а индексы.

                                « Последнее редактирование: 14-12-2008 00:36 от zubr »
                                Записан
                                SEA


                                Кажется, даже это не формулировка… Как-то все проще должно быть, только непонятно, как именно.


                                Записан

                                почувствуй радость творческих мук!

                                zubr

                                Гость


                                SEA, это ты о чем?


                                Записан
                                fredi5


                                Метки «004, 005» это и есть текстовые значения, расположенные на пустых строках в 1 колонке. Чую, что, наверно, придется методом поиска строк по метке «сверху — вниз» определять номера нужных
                                строк. А потом, известный диапазон строк сохранить в txt-file и из него ввести во второй StringGrid.
                                Это должно сработать, но, уж, как-то «громоздко» получается. Неужели нет более простого варианта7


                                Записан
                                zubr

                                Гость


                                Зачем так сложно? Я же тебе уже дал направление к действиям. Вот все что тебе нужно:

                                const
                                  minDiap: Integer = 5;
                                  maxDiap: Integer = 105;

                                procedure TForm1.Button1Click(Sender: TObject);
                                var
                                  i, counter, number:Integer;
                                begin
                                 counter := 0;
                                 For i:=0 to StringGrid1.RowCount-1 do
                                 begin
                                  number := StrToIntDef(StringGrid1.Cells[0, i], -1);
                                  If (number <> -1) and (number >= minDiap) and (number <= maxDiap) then
                                  begin
                                   StringGrid1.Rows[counter].Assign(StringGrid1.Rows[i]);
                                   inc(counter);
                                  end
                                  else
                                  If number > maxDiap then
                                  break;
                                 end;
                                 If counter > 0 then
                                 StringGrid1.RowCount := counter;
                                end;


                                Записан
                                fredi5


                                Отрицательный результат — тоже результат. В коде большой вопрос про судьбу данных. Они, как и
                                должно быть, пропадают. А в таблицу выводится или 5 строк ( с данными 001,002…005) или количество
                                срабатываний счетчика ( 5), в зависимости от отношения величины адреса диапазона.


                                Записан
                                zubr

                                Гость


                                Покажи твой код.


                                Записан
                                fredi5


                                //чтение текста в грид
                                unit Unit1;
                                interface
                                uses
                                  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                  Dialogs, Grids, StdCtrls;
                                type
                                  TForm1 = class(TForm)
                                    Button1: TButton;
                                    StringGrid1: TStringGrid;
                                    Button2: TButton;
                                    procedure Button1Click(Sender: TObject);
                                    procedure Button2Click(Sender: TObject);
                                    private
                                    { Private declarations }
                                  public
                                    { Public declarations }
                                  end;
                                var
                                  Form1: TForm1;
                                implementation
                                {$R *.dfm}
                                procedure TForm1.Button1Click(Sender: TObject);
                                var
                                   f: textfile;
                                   temp, x, y: integer;
                                   tempstr: string;
                                 // вводится текстовый файл, импортированный из таблицы  Excel
                                begin
                                 assignfile(f, ‘c:psp.txt’);
                                   reset(f);
                                   readln(f, temp);
                                   stringgrid1.colcount := temp;
                                   readln(f, temp);
                                   stringgrid1.rowcount := temp;
                                   for X := 0 to stringgrid1.colcount — 1 do
                                      for y := 0 to stringgrid1.rowcount — 1 do
                                         begin
                                         readln(F, tempstr);
                                         stringgrid1.cells[x, y] := tempstr;
                                   end;
                                   closefile(f);
                                end;
                                   // Все данные прекрасно вывелись. В таблице в пустых строках,
                                   // в разных местах, в первой колонке,  метки 10, 20, 30, 40….

                                procedure TForm1.Button2Click(Sender: TObject);
                                  var
                                    i, counter, number:Integer;
                                 // minDiap, maxDiap поместил в переменные т.к. в зависимости
                                 // от области таблицы, которую нужно вывести, им будут присваиваться
                                 // разные значения
                                   maxDiap, minDiap: Integer;
                                begin
                                  // Здесь указывается диапазон вывода существующих строк данных
                                  // согласно указанным меткам. Вывести строки от метки 20 до метки 30
                                 minDiap := 20;
                                 maxDiap := 30;
                                  //——————————————-
                                  counter := 0;
                                 For i:=0 to StringGrid1.RowCount-1 do
                                 begin
                                  number := StrToIntDef(StringGrid1.Cells[0, i], -1);
                                  If (number <> -1) and (number >= minDiap) and (number <= maxDiap) then
                                  begin
                                   StringGrid1.Rows[counter].Assign(StringGrid1.Rows[i]);
                                   inc(counter);
                                  end
                                  else
                                  If number > maxDiap then
                                  break;
                                 end;
                                 If counter > 0 then
                                 StringGrid1.RowCount := counter;
                                end;
                                  // Итог. Данных нет. Выведены 2 строки с индексом меток (20 и 30)
                                end.

                                « Последнее редактирование: 15-12-2008 09:28 от zubr »
                                Записан
                                zubr

                                Гость


                                fredi5
                                1. На будущее обрамляй код тегами код.
                                2. Высылай свой текстовый файл


                                Записан
                                zubr

                                Гость


                                fredi5, сдается мне, у тебя всего только 2 строки с данными метками и есть. Если так, то перебирай все строки, определишь индексы строк с метками и затем уже как я тебе еще в посте №3 показывал делай.


                                Записан
                                fredi5


                                Из кода убрал автоформат колонок, чтобы не мешал. Файл урезан, но работает так-же.


                                * psp.txt (5.96 Кб — загружено 1159 раз.)


                                Записан
                                zubr

                                Гость


                                fredi5, какие проблемы? Смотри мой пост №15 и предыдущие посты и делай. Это тебе домашнее задание. Все очень просто. Не надо никаких дополнительных текстовых файлов и дополнительных StringGrid.


                                Записан

                                Понравилась статья? Поделить с друзьями:
                              • Как найти диаметр круга с примерами
                              • Как найти кинетическую энергию протона формула
                              • Не знаю мама как ее нашел
                              • Как найти в какой колонии сидит осужденный
                              • Как составить маршруты для разных видов туризма