Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Операции в Tstringlist!!!!!   Найти похожие ветки 

 
CRACKISH   (2005-01-25 19:06) [0]

Есть stringlist!!!! Туда занесены строки с таким форматом: "%s=%f"!!!! В массиве имена строк (%s) повтаряються!!!! Мне надо суммировать параметры (%f) в одинаковых именах (%s) строк!!!! И чтоб имена (%s) больше не повтарялись!!!!!! Как это осуществить??? Зарание благодарен!!


 
jack128 ©   (2005-01-25 19:16) [1]

в цикле. см TStrings.Names, TStrings.Values + F1


 
Jel ©   (2005-01-25 19:30) [2]


> см TStrings.Names, TStrings.Values

Этого нет в tStrings. Только в ValueListEditor.


 
Antonn ©   (2005-01-25 19:37) [3]

CRACKISH   (25.01.05 19:06)
У тебя знаки препинания западают!!! немного раздражает!!!


 
jack128 ©   (2005-01-25 19:37) [4]

Jel ©   (25.01.05 19:30) [2]
А если таки нажать F1?


 
Jel ©   (2005-01-25 19:40) [5]


> jack128 ©   (25.01.05 19:37) [4]

Медленно краснею, посыпая голову пеплом. :( Ты прав - есть.


 
CRACKISH   (2005-01-25 19:49) [6]


> в цикле. см TStrings.Names, TStrings.Values + F1


НЕ я это знаю!я не могу додуматься до, так сказать, до сортировки! Чтоб Удаляла повторяющиеся Names, и при этом суммыровало Values!


 
Jel ©   (2005-01-25 19:56) [7]

Ставишь Sotred := True;
Перебираешь все элементы, проверяя не равно ли следующее имя предыдущему. Если равно суммируешь значения и удаляешь лишний элемент. И так до конца списка.


 
CRACKISH   (2005-01-25 20:57) [8]

Я уже так пробываЛ!!! При удалении поля, индексы у полей меняются! И под конец цыкла вылетает ошибка!!!!


 
CRACKISH   (2005-01-25 20:57) [9]

DataField.Sorted:=True;

for g:=0 to DataField.Count-1 do
begin
 if g<>0 then
  begin
   DataField.Sorted:=False;
   if DataField.Names[g]=DataField.Names[g-1] then
    begin
     DataField.ValueFromIndex[g-1]:=Format("%f", [StrToFloat(DataField.ValueFromIndex[g-1])+StrToFloat(DataField.ValueFromIndex[g])]);
     DataField.Delete(g);
   end;
 end;
end;


Вот как я сделал!


 
CRACKISH   (2005-01-25 20:59) [10]

И все равно вылетает ошибка! :-(


 
begin...end ©   (2005-01-25 21:10) [11]

> [10] CRACKISH   (25.01.05 20:59)

Конечно же, вылетает.

Вы же внутри цикла удаляете элементы из списка DataField. В результате количество элементов списка (значение свойства DataField.Count) уменьшается. Но минимальное и максимальное значения счётчика цикла (0 и DataField.Count-1) вычисляются только один раз - перед первым проходом цикла.

Например, изначально в списке было 10 элементов. После, скажем, восьми проходов цикла удалились 2 элемента. Теперь количество элементов равно 10 - 2 = 8. Поэтому цикл надо бы заканчивать, а он продолжается, пока счётчик не станет больше 10 - 1 = 9. В результате Вы внутри цикла обращаетесь к несуществующим элементам списка.

Выход: использовать цикл for с downto вместо to, или цикл while.


 
Anatoly Podgoretsky ©   (2005-01-25 22:05) [12]

Ты в курсе, что c 1971 года существует обратный цикл, называется downto/


 
CRACKISH   (2005-01-25 23:34) [13]

Огромное спасибо! Попробывал с downto!!! Сам цыкл работает без ошибок, но результата вообще нет! Может я чето не то пишу? Помогите пожалуйста!
Сам цыкл:
DataField.Sorted:=True;

for g:=DataField.Count-1 to 1 do
begin
   DataField.Sorted:=False;
   if DataField.Names[g]=DataField.Names[g-1] then
    begin
     DataField.ValueFromIndex[g-1]:=Format("%f", [StrToFloat(DataField.ValueFromIndex[g-1])+StrToFloat(DataField.ValueFromIndex[g])]);
     DataField.Delete(g);
   end;
end;


 
Palladin ©   (2005-01-26 00:05) [14]

он вернулся... восклицательный мальчик... год не было... не повзраслел ни на чуть чуть...


 
CRACKISH   (2005-01-26 00:16) [15]

он вернулся... восклицательный мальчик... год не было... не повзраслел ни на чуть чуть... - это уже называется флейм!!!!! А у вас все гостиприимностью и не пахнет!!!!!


 
CRACKISH   (2005-01-26 15:26) [16]

Всем спасибо! Разобрался!


 
Palladin ©   (2005-01-26 23:31) [17]

а может повзраслел... на чуть чуть...



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
3-1105529961
grigory
2005-01-12 14:39
2005.02.13
Публикация базы в интернете!


1-1107084475
ТехникПТО
2005-01-30 14:27
2005.02.13
ListBox с подсказкой


6-1101480735
Muhan
2004-11-26 17:52
2005.02.13
Как выудить данные с интернет страницы с помощью ссылки в Делфи


1-1106776100
Urvin
2005-01-27 00:48
2005.02.13
TDBGrid


6-1101627857
ildar_kh1
2004-11-28 10:44
2005.02.13
Фреймы и баннеры