ClientDataSet に構造を持つ 3 つのレコードがあります。
数値: 整数; 開始: TTime; 終了: TTime;
1; 9:00; 10:00 2; 9:30; 10:00 3; 9:40; 10:20
次のように、これらのレコードを他の ClientDataSet に取得する必要があります。
1; 9:00; 9:30 2: 9:30; 9:40 3; 9:40; 10:00 4; 10:00; 10:20
を使用TList<TTime>
し、両方の列を入力し、並べ替えてから、重複をスキップしてリストを繰り返します。このような。
var l: TList<TTime>; t1, t2: TTime; id2: cardinal;
begin
l := TList<TTime>.Create;
try
cds1.First;
while not cds1.Eof do begin
l.Add( Frac(cds1.Fields[1].AsDateTime) );
l.Add( Frac(cds1.Fields[2].AsDateTime) );
cds1.Next;
end;
l.Sort;
cds2.Clear;
if l.Count <= 0 then exit;
t1 := l[0]; id2 := 0;
for t2 in l do begin
if t1 > t2 then raise Exception.create ('Sort silently failed!') else
if t1 < t2 then begin
Inc(id2);
cds2.AppendRecord([ id2, t1, t2 ]);
t1 := t2;
end;
end;
finally
l.Free;
end;
end;