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-ом, разумеется) по тому же принципу, по которому мы считаем на бумаге в столбик, учитывая положение точки и не заморачиваясь дополнительными кодами для представления дробной части числа. Для бизнес-арифметики - самый подходящий тип данных.