Sergei I. Gorelkin писал(а):у ini-файлов есть методы
А кто сказал, что я работаю со штатными ини? Сейчас у меня делается так:
1. на диске хранится шифрованный ини
2. при запуске он грузится в мемстрим, дешифруется и копируется в stringlist, с которым, собсно, и идет вся работа
3. при завершении stringlist копируется обратно в стрим, шифруется и сбрасывается на диск.
Вот как такой ини
- Код: Выделить всё
- ElapsedTime=18991230000014
 Runs=2
 LastRun=20080513022049
 
выглядит на диске:
- Код: Выделить всё
- <
 000Edt19
 05e=2unRaLe98
 iRщ1=a20
 
 44Ts=220p3l1
(метод шифрования см. во всё той же ПЗ)
Что до врапперов-парсеров универсального формата, то может быть кому-то сэкономится время (еще не решил, нужны ли будут процедуры, но пока решил оставить и функции и процедуры):
- Код: Выделить всё
- unit CommonUtils;
 
 interface
 uses  SysUtils,strutils;
 
 procedure DT2S(indt:TDateTime;var outs:string);
 function DT2S(indt:TDateTime):string;
 procedure S2DT(ins:string;var outd:TDateTime);
 function S2DT(ins:string):TDateTime;
 
 implementation
 
 //преобразую yyyymmddhhnnss в tdatetime и обратно
 function DT2S(indt:TDateTime):string;
 begin
 Result:=FormatDateTime('yyyymmddhhnnss',indt);
 end;
 
 procedure DT2S(indt:TDateTime;var outs:string);
 begin
 outs:=DT2S(indt)
 end;
 
 function S2DT(ins:string):TDateTime;
 begin
 Result:=EncodeDate(
 StrToInt(LeftStr(ins,4)),
 StrToInt(MidStr(ins,5,2)),
 StrToInt(MidStr(ins,7,2)))+
 EncodeTime(
 StrToInt(MidStr(ins,9,2)),
 StrToInt(MidStr(ins,11,2)),
 StrToInt(LeftStr(ins,2)),
 0);
 end;
 
 procedure S2DT(ins:string;var outd:TDateTime);
 begin
 outd:=S2DT(ins);
 end;
 
 end.
 
Добавлено спустя 10 минут 12 секунд:Sergei I. Gorelkin писал(а):В FPC/Delphi можно воспользоваться Variant
Возможно. Вот только в Clarion компилятор выполняет нужные приведения в зависимости от типа результата, без использования неопределенных типов вроде вариант-а.
Особенно мне нравилось (была необходимость) делать примерно такое:
a:long;
b,c:string
a=b+c;
причем в а попадала именно сумма вида
a=strtofloat(b)+strtofloat(c)
А еще здорово не хватает одного очень удобного типа данных. Не помню, чтобы в Паскале я такое встречал - packed decimal. Смысл его в том, что в каждом байте такого числа хранится две 
цифры. В первом ниббле первого байта этого числа хранился знак, и где-то еще (просто не помню, где именно) - разрядность, позиция десятичной точки и порядок. То есть, число было всегда целым, не нужна была плавающая арифметика, а все арифметические действия производились (RTL-ом, разумеется) по тому же принципу, по которому мы считаем на бумаге в столбик, учитывая положение точки и не заморачиваясь дополнительными кодами для представления дробной части числа. Для бизнес-арифметики - самый подходящий тип данных.