Заводишь массив для подсчета значения параметра.
Далее ползешь по мемо, для каждой строки выделяешь нужный параметр и суммируешь в массиве. Далее просто вывод. Как-то так:
Код:
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 - его значение.