Показать сообщение отдельно
  #2  
Старый 26.07.2018, 21:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Заводишь массив для подсчета значения параметра.
Далее ползешь по мемо, для каждой строки выделяешь нужный параметр и суммируешь в массиве. Далее просто вывод. Как-то так:
Код:
var
  P : Array Of Double;
  I, pIdx : Integer;
  pName : String;
  pVal : Double;
begin
  SetLength(P,ListBox1.Items.Count);
  For I := Low(P) To High(P) Do P[i] := 0; // just in case
  For I := 0 To Memo1.Lines.Count-1 Do
  Begin
    ExtractParamNameFromLine(Memo1.Lines[i],pName,pVal);
    If pName <> '' Then
      Begin
        pIdx := ListBox1.Items.IndexOf(pName);
        If pIdx > -1 Then P[pIdx] := P[pIdx] + pVal;
      End;
  End;

  // Print to memo
  Memo1.Lines.Add('--- Итог: ---');
  For I := Low(P) To High(P) Do
    If P[i] > 0 Then Memo1.Lines.Add(ListBox1.Items[i] + ' --- '+ FloatToStr(P[i]) + ' %');
end;

Ну, процедуру ExtractParamNameFromLine думаю сам напишешь.
Декларация:
Код:
procedure ExtractParamNameFromLine(S : String; var AName : String; var AVal : Double);
Смысл - из переданной строки S она выбирает в AName имя параметра, а в AVal - его значение.
Ответить с цитированием