Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.20;
Скачать: CL | DM;

Вниз

организовать циклы нужно   Найти похожие ветки 

 
Igor2010   (2009-07-18 16:55) [0]

Ситуация вроде простая но видно не для меня.
В общем нужно пробежаться по двум спискам типа 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;

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


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


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

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


 
KilkennyCat ©   (2009-07-18 19:18) [2]

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


 
KilkennyCat ©   (2009-07-18 19:23) [3]

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

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:24) [4]

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


 
KilkennyCat ©   (2009-07-18 19:25) [5]

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


 
xayam ©   (2009-07-18 20:28) [6]


> KilkennyCat


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


 
AlexDan ©   (2009-07-18 20:35) [7]

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


 
{RASkov} ©   (2009-07-18 20:47) [8]

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

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

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

Не только(


 
AlexDan ©   (2009-07-18 20:50) [9]

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


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


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


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


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


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


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


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


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

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


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

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


 
KilkennyCat ©   (2009-07-18 23:35) [14]


> 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;


 
KilkennyCat ©   (2009-07-18 23:37) [15]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.09.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
2-1248094465
MAX
2009-07-20 16:54
2009.09.20
из Word в БД


15-1246008636
Kolan
2009-06-26 13:30
2009.09.20
Чем заменить TChart?


15-1248208203
Юрий
2009-07-22 00:30
2009.09.20
С днем рождения ! 22 июля 2009 среда


15-1248201124
Тимур
2009-07-21 22:32
2009.09.20
Как вносить строки в реестр?


1-1216127848
IGray
2008-07-15 17:17
2009.09.20
Встроенный локализатор Delphi2007 - глюк с кириллицей!