Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизTStringList Найти похожие ветки
← →
gsk (2004-09-16 15:53) [0]List1:=TStringList.Create;
Далее в List1 добавляем count строк (в конкретном случае, строки - наборы цифр).
Затем выводим эти строки в Memo1 следующим образом:
for k:=0 to count-1 do
for p:=0 to count-1 do
Memo1.Lines.Add(List1.Strings[p]);
for i:=0 to count-1 do
Memo1.Lines.Add(List1.Strings[i]);
Естественно, содержимое List1 выводится count+1 раз.
Далее цикл по i убираем, оставляем только по k и p. И в Memo1 выводятся строки, совершенно отличные от первого случая.
Кто-нибудь может подсказать - почему?
← →
Александр Иванов © (2004-09-16 15:56) [1]Полный код в студию
← →
Amoeba © (2004-09-16 15:57) [2]А не лучше ли использовать
Memo1.Lines.Assign(List1);
или
Memo1.Lines.Text := List1.Text;
И не надо никаких циклов
← →
KSergey © (2004-09-16 15:58) [3]> Кто-нибудь может подсказать - почему?
Так прога написана
А как хотелось-то?
← →
gsk (2004-09-16 16:09) [4]Циклы нужны. Каждая строка считывается в цикле и с ней производятся некие действия. Последний цикл по i - временный, для проверки того, что List1 действительно загружается нужными строками. Когда все заработало правильно этот цикл убрал. И появилась проблема. Постепенно убрал все действия со строками в циклах по k и p и вставил Memo1 в эти циклы. Проблема осталась. Опять вернул цикл по i. Все работает правильно.
← →
olookin © (2004-09-16 16:12) [5][4] gsk (16.09.04 16:09)
Я вот цикла по k не понимаю - он зачем?
← →
Amoeba © (2004-09-16 16:22) [6]
> Каждая строка считывается в цикле и с ней производятся некие
> действия.
1. Какие действия?
2. Если все делать в List1, то для передачи строк в Memo цикл не нужен. См. Amoeba © (16.09.04 15:57) [2]
← →
gsk (2004-09-16 16:27) [7]Вот код:
List1:=TStringList.Create;
i:=0;
while i<=count do
begin
List1.Add(Function); {заполнение List1, Function-некая функция для "подготовки" строк для List1}
inc(i);
end;
for l:=0 to count-1 do
for p:=0 to count-1 do
Memo1.Lines.Add(PicList1.Strings[p]);
for i:=0 to count-1 do
Memo1.Lines.Add(PicList1.Strings[i]);
Похоже проблема в Function. Если List1 заполнять просто случайными строками, проблемы нет. Просто кажется странным, что если убрать цикл в котором строки из List1 выводятся в Memo, появляется проблема.
← →
kukuikar © (2004-09-16 16:38) [8]
> for l:=0 to count-1 do
> for p:=0 to count-1 do
> Memo1.Lines.Add(PicList1.Strings[p]);
из цикла получается что
грузишь (count-1)*(count-1) раз! ЗАЧЕМ?
← →
Amoeba © (2004-09-16 16:43) [9]1. В List1 у тебя содержится Count+1 строк. Следовательно, последняя строка далее не используется.
2. Передается ли в Function i?
3. Передать строки в Memo можно проще:
Memo1.Lines.Text := "";
for l:=0 to count-1 do
Memo1.Lines.Text := Memo1.Lines.Text + List1.Text;
Memo1.Lines.Text := Memo1.Lines.Text + List1.Text;
3. Непонятно, зачем многократная передача в Memo одного и того же.
← →
gsk (2004-09-16 16:49) [10]> kukuikar © (16.09.04 16:38) [8]
Реально строки из List1 используются для других действий, не связанных с Memo. Просто я упростил код и вставил Memo для контроля, что же передается из List1 в цикле (после того как стало ясно, что есть проблема).
← →
gsk (2004-09-16 16:52) [11]> Amoeba © (16.09.04 16:43) [9]
i передается в Function. Но Function больше нигде далее не вызывается.
← →
Amoeba © (2004-09-16 16:54) [12]Еще раз обращаю внимание автора вопроса (пригодится на будущее), что предавать строки из StringList в Memo (если передаются все) используя цикл - не есть хорошо. Для этого достаточно одного действия.
← →
kukuikar © (2004-09-16 17:07) [13]ну а для контроля нельзя сделать так
Memo1.Lines.Text:=List1.Text ?
зачем геммороиться с циклов и передавать построчно.
И что же за код такой секретный что нельзя его часть показать?
← →
Amoeba © (2004-09-16 17:11) [14]
> kukuikar © (16.09.04 17:07) [13]
Про ненужные циклы я уже устал повторять уважаемому автору вопроса.
Подозреваю, что ошибка кроется в той части кода, которую нам упорно не хотят показать.
← →
gsk (2004-09-17 12:52) [15]Циклы нужны. Мне надо каждую строку присваивать элементам массива и делать с ними некоторые действия. Когда стало ясно, что что-то не так, я удалил из кода все действия и массив и решил проверить, что же передается из List1. Для этого использовал Memo. Но передачу в Memo оставил так же, как это нужно в программе, т.е. с помощью циклов. Если использовать Memo1.Lines.Text:=List1.Text, то все передается правильно. Но с циклом - не правильно. Но если после вывода в Memo в цикле (по l и p) я вывожу тоже самое еще раз (цикл по i, как указано выше), то содержимое List1 выводится правильно. Больше ничего в коде нет. И этого я не понимаю.
Кстати, если в первом цикле (по l и p) не выводить в Memo, а присваивать строки List1 элементам массива, то содержание массива также зависит от того, есть ли далее цикл по i с выводом в Memo или нет.
← →
Amoeba © (2004-09-17 13:20) [16]1. Просто мистика какая-то.
2. Насколько я понял, передача в Memo используется чисто в отладочных целях, т.к. в окончательном виде вместо нее должна быть какая-то работа со строками из списка, выполняемая во вложенном цикле? Т.е. важен сам цикл?
3. Интересно, что получится (это уже из области шаманства), если список заполнять не результатом работы твоей ф-ии, а одним и тем же константным значением?
4. Какой в этом скрытый смысл?
i:=0;
while i<=count do
begin
У тебя создается не Count строк, а Count+1 строка. В Memo же последняя строка не попадает, покольку за проход цикла считывается только Count строк.
← →
gsk (2004-09-17 13:39) [17]1. Согласен.
2. Да, важен именно цикл.
3. Сейчас попробую. Хотя, как я понимаю, List1 не должен "помнить" кто, как и какими строками его заполнил. Но надо проверить. Как проверю - сообщю.
4. Сколько строк вывожу в Memo не важно. Просто только каждая третья строка правильная, остальные нет.
← →
gsk (2004-09-17 13:52) [18]Попробовал.
Заполнил список одним и тем же константным значением. Работает правильно независимо от того, есть ли далее дополнительный цикл по i. Как только использую Function, опять все не так. Но я далее больше нигде Function не вызываю и ничего со списком не делаю! Только лишь добавляю последний цикл или убираю его. Не понимаю!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c