Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

организовать циклы нужно [D7, WinXP]


Igor2010 ©   (2009-07-18 16:55:00) 

Ситуация вроде простая но видно не для меня.
В общем нужно пробежаться по двум спискам типа TStringList и удалить в Stringrid1 строки, равные в списках, относительно списка  GridSL(начиная с i:=0, а в StringGrid1 начиная с i+1).
Пробую так но это не правильно

//это нормально робит с DW взял
procedure SGDeleteRow(SG: TStringGrid; RowToDelete: Integer);
var
 i: Integer;
begin
 with SG do
 begin
   if (RowToDelete >= 0) and (RowToDelete < RowCount) then
   begin
     for i := RowToDelete to RowCount - 2 do
       Rows[i].Assign(Rows[i + 1]);
     RowCount := RowCount - 1;
   end;
 end;
end;

*************************************
//так вызываю

       i:=0;
       j:=0;
       while (i<=GridSL.Count-1) do
       begin

          b:=False;

          while (j<=ExcelSL.Count-1) do
          begin
             if GridSL.Strings[i]=ExcelSL.Strings[j] then
             begin

                 SGDeleteRow(Form1.StringGrid1, i+1);
                 GridSL.Delete(i);

                 b:=True;
                 break;
             end;
           
          end;
           j:=j+1;
           if not b then i:=i+1;
       end;

Если так делать, то получится не соответсвие списко, количество строк разное, или зацикливание....как только не пробовал ПОМОГИТЕ


Igor2010   (2009-07-18 23:40:00) [1]

Удалено модератором


KilkennyCat   (2009-07-18 23:37:00) [2]

Удалено модератором


KilkennyCat   (2009-07-18 23:35:00) [3]


> Igor2010 (18.07.09 23:24) [12]

куда уж больше-то????
осталось вложить один цикл на проверку соответствия строкам стрингрида, и все!
Это хоть и не самый оптимальный вариант, но надежный как танк.

for i := 0 to spisok1.count - 1 do
for z := 0 to spisok2.count - 1 do
  if spisok1.strings[i] = spisok2.strings[z] then
    for n := 1 to stringrid.count - 1 do
       if spisok1.strings[i] = stringrid.нужнаяячейка then begin
         spisok2.delete[z];
         StringGrid1.Rows.delete(n);
       end;


Igor2010   (2009-07-18 23:31:00) [4]

Удалено модератором


Igor2010   (2009-07-18 23:24:00) [5]


> пойду-ка я лучше курить

ступайте же....только мне помогите сначала))))


Igor2010   (2009-07-18 23:22:00) [6]


> нужно просто верно продумать логику.


да уж....вот я здесь и задал вопрос потому что с логикой у меня проблема


Igor2010   (2009-07-18 23:19:00) [7]


>    if spisok1.strigs[i] = spisok2[z] then удаляем там че
> хотим.
> end.


я б с радостью удалил чо хотел но там индекс то сместиться и палюбому через одну буду пропускать проверку в цикеле на равенство строк


AlexDan   (2009-07-18 20:50:00) [8]

> {RASkov} ©   (18.07.09 20:47) [8]
> При этом измучишь половину пользователей данного форума)
> ...а то и всех
тяжело в мученье, легко в бою(раю)..;)).


{RASkov}   (2009-07-18 20:47:00) [9]

> [7] AlexDan ©   (18.07.09 20:35)
> далее в таких случаях я просто долго отлаживаю пошаговым режимом

При этом измучишь половину пользователей данного форума) ...а то и всех

> [6] xayam ©   (18.07.09 20:28)
> Или это только у меня?

Не только(


AlexDan   (2009-07-18 20:35:00) [10]

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


xayam   (2009-07-18 20:28:00) [11]


> KilkennyCat


P.S А почему прочее не работает? Или это только у меня?


KilkennyCat   (2009-07-18 19:25:00) [12]

end. лишницй. пойду-ка я лучше курить - в трех строчках куча опечаток... стылд и позор моей лысине.


KilkennyCat   (2009-07-18 19:24:00) [13]

третью стройчку читать как if spisok1.strings[i] = spisok2.strings[z] then


KilkennyCat   (2009-07-18 19:23:00) [14]

хотя не, я тож фигню сказал. а все почему? потому что нехрен такие пременные одинаковые писать.

for i := 0 to spisok1.count - 1 do //точку старта сами подставляйте.
 for z := 0 to spisok2.count - 1 do
   if spisok1.strigs[i] = spisok2[z] then удаляем там че хотим.
end.


KilkennyCat   (2009-07-18 19:18:00) [15]

фигню глаголит, а не истину. два списка, грид, и еще некий GridSL, про который неизвестно, входит ли он в число первых двух, иди это третий? собственно, без разницы, ибо инкрементировать j, которая участвует в цикле, которые бегает по списку, в котором удаляется! это круто.


СовестьДМ   (2009-07-18 18:50:00) [16]


> Igor2010   (18.07.09 16:55) 
> Ситуация вроде простая но видно не для меня.

истину глаголите чистую истину


Наверх

Титульная страница Поиск, карта сайта Написать письмо