![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа ;с TStringList [D6, Win95/98]
DN © (2002-10-28 17:17:00)Произвожу некоторые действия с переменной SSS и над списком переменной LIST в цикле по 3 строки, после чего их необходимо уничтожить, при удалении последних 3 строк из списка LIST выдает ошибку "List out of bounds", подскажите в чем проблема
begin
List1:= TStringList.Create;
...
for j:= 1 to List1.Count-1 do
begin
SSS:= List1.Strings[0]+List1.Strings[1]+List1.Strings[2];
{... работа с переменной SSS ...}
List1.Delete(2);
List1.Delete(1);
List1.Delete(0);
END;
List1.Free;
List2.Free;
end;
Nomad.kz (2002-10-28 17:51:00) [1]не очень понял, зачем в одной итерации цикла делать три Delte? Может, тут цикл вообще не нужен?
TTCustomDelphiMaster (2002-10-28 17:50:00) [2]DN © (28.10.02 17:17)
Цикл выполняется List1.Count-1 раз, а строчек в List1 хватит на List1.Count div 3 раз.
Anatoly Podgoretsky (2002-10-28 17:49:00) [3]У тебя наверно количество строк не кратно 3
и вот это тоже недопустимо for j:= 1 to List1.Count-1 do, надо
While List1.Count > 0 do begin
SSS:= "";
for I := 1 to 3 do begin
if List1.Count > 0 do begin
SSS := SSS + List1.Strings[0]
List1.Delete(0);
end;
end;
...
END;
Андрей Прокофьев (2002-10-28 17:25:00) [4]Внук © (28.10.02 17:23)
:)
Андрей Прокофьев (2002-10-28 17:24:00) [5]А, скорее, ошибка в этом
for j:= 1 to List1.Count-1do
вычислился ОДИН раз в начале цикла
лучше заменить это на while/repeat
Внук (2002-10-28 17:23:00) [6]Да и вообще здесь цикл for неуместен, поскольку List1.Count-1 вычисляется один раз в начале цикла... Скорее уж while List1.Count>2 do...
Андрей Прокофьев (2002-10-28 17:20:00) [7]List1.Delete(0);
List1.Delete(0);
List1.Delete(0);