Форум: "Начинающим";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];
Внизорганизовать циклы нужно Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c