Здравствуйте.
Строка для разбора:
0R0,Dm=184D,Sm=2.4M,Ta=-12.9C,Tp=-12.2C,Ua=78.8P,Pa=1009.6H.
- не ясно что делать с 0R0;
- принадлежность завершающей "точки" к строке (да, нет);
- левый ограничитель подстроки значения - уникальный ключ в формате "<имя ключа>=";
- правый ограничитель - единица измерения в формате "<ед.изм.>," или "<ед.изм.>." (последняя пара) или "<ед.изм.>" (можно обойтись без "запятой")
Для удобства можно связать ограничители с непосредственно с переменной: левый как "Описание" переменной, правый - "Единица измерения" шкалы.
Например для ключа "Ta": "Описание" - "Ta=", "Единица измерения" - "C," или "C".
Для переменной, связанной с полем как основная и разбираемой строкой как дополнительная скрипт по изменению доп. переменной:
var aStr: UTF8String;
i: integer;
begin
with Sender as TM_Field do begin
i := StrPos(UTF8ToString(Variable.Description), VariableEx.AsStr); // позиция ключа (левого ограничителя)
if i = 0 then exit; // ОШИБКА: ключ не найден
aStr := UTF8Copy(VariableEx.AsUTF8String, i + UTF8Length(Variable.Description), 200); // урезать строку до начала значения (200 - макс. длина подстроки значения !!!)
i := StrPos(UTF8ToString(Variable.Units), UTF8ToString(aStr)); // позиция завершения подстроки значения (правого ограничителя)
if i = 0 then exit; // ОШИБКА: завершение не найдено
Value := StrToFloatDef(UTF8ToString(UTF8Copy(aStr,1, i - 1)), -999999); // значение из строки или по-умолчанию
end;
end.
Если нет необходимости привязки переменных к полям (заполнение таблицы), скрипт можно переписать как процедуру или функцию (с двумя параметрами типа TM_Variable) в составе скрипта по изменению строки разбора, где собственно в скрипте организуется цикл (для таблицы) или перебор (произвольный набор переменных) вызовов функции/процедуры по всем переменным.
Во вложении пример (необходимо пересохранить) для набора полей и таблицы. Выпадающий список позволяет выбрать строку, в т.ч. и с ошибками. Можно вносить изменения в разбираемую строку и увидеть результат в полях и таблице.