Главная страница
    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.033 c
14-1106669456
Piter
2005-01-25 19:10
2005.02.13
Вот такие письма иногда приходят - очередной лохотрон


3-1105423621
Dimich1978
2005-01-11 09:07
2005.02.13
Как работать с файлом БД mdf


1-1107168551
Алексей
2005-01-31 13:49
2005.02.13
QuickReport


3-1105607678
pietro
2005-01-13 12:14
2005.02.13
Как перегнать таблицу в новый формат


1-1106841288
SMT
2005-01-27 18:54
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский