![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
организовать циклы нужно [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)
> Ситуация вроде простая но видно не для меня.
истину глаголите чистую истину