Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.048 c
6-1090908972
MetalFan
2004-07-27 10:16
2004.10.03
IdTCPClient&amp;IdTCPServer VS ServerSocket&amp;ClientSocket


4-1093892608
<b>He`KTo</b>
2004-08-30 23:03
2004.10.03
Звук


14-1095089567
Knight
2004-09-13 19:32
2004.10.03
А что такое Альтернативный ввод текста и где его найти?


1-1095195660
][ncognito
2004-09-15 01:01
2004.10.03
OnChanging в TreeView


1-1095678696
Nata
2004-09-20 15:11
2004.10.03
Форма





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский