Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Операции в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.041 c
14-1106583118
Кирилл
2005-01-24 19:11
2005.02.13
@ Dreamcast


14-1106111354
YurikGL
2005-01-19 08:09
2005.02.13
Как раскрутить сайт?


3-1106036342
Некто
2005-01-18 11:19
2005.02.13
Медленная работа MS Access


1-1106922478
BFG9k
2005-01-28 17:27
2005.02.13
DateTime из строки вида 12:01:29 30/01/05


14-1106554532
Prohodil Mimo
2005-01-24 11:15
2005.02.13
Где достать инфу по работе с кассовыми аппаратами?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский