1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148:
| (als "Test.dpr" gespeichert) program Test;
{$APPTYPE console} uses sysutils,classes; const MaxZahl = 500000; MeineDatei='C:\MeineDaten.data';
type
TWertRec = packed record Datum: TDateTime; Flags: Byte; Anzahl: LongInt; Uebereinstimmungen: LongInt; end;
TWert = class(TObject) Datum: TDateTime; Flags: Byte; Anzahl: LongInt; Uebereinstimmungen: LongInt; end;
var t1,t0: TDAteTime; WerteFeld : array of TWertRec;
daten: TList;
procedure Erzeugen; var i : integer; Wert: tWertRec; WerteDatei : file of tWertRec;
begin AssignFile(WerteDatei,MeineDatei); rewrite(WerteDatei); randomize; For i := 1 to MaxZAhl do begin with wert do begin Datum:= now; Flags:= random(256); Anzahl:= i; Uebereinstimmungen:= random(Anzahl+1); IF MAxZahl< 1024 then Writeln(I:10,FormatDateTime(' DD.MM.YYYY hh:mm:ss.zzz',Datum),Flags:4,Anzahl:12,Uebereinstimmungen:12) else IF (I And $ffFF) = 0 then Writeln(I:10,FormatDateTime(' DD.MM.YYYY hh:mm:ss.zzz',Datum),Flags:4,Anzahl:12,Uebereinstimmungen:12);
end; write(WerteDatei,Wert); end; CloseFile(WerteDatei); end;
procedure EinlesenArray; Var cnt:integer; WerteDatei : file of tWertRec; begin AssignFile(WerteDatei,MeineDatei); reset(WerteDatei); cnt :=filesize(WerteDatei); writeln('Anzahl Datensätze: ',cnt); setlength(WerteFeld,cnt); BlockRead(WerteDatei,WerteFeld[0],cnt); closefile(WerteDatei); end;
procedure EinlesenObject; var streamM: TMemoryStream; streamF: TFileStream; cnt, cntr: Integer; d: TDateTime; b: Byte; i1, i2: Integer; wert: TWert; begin streamM:= TMemoryStream.Create; streamF:= TFileStream.Create(MeineDatei, fmOpenRead or fmShareDenyWrite); if Assigned(daten) = false then begin daten:= TList.Create; end else begin daten.Clear; end; try streamM.CopyFrom(streamF, streamF.Size);
cnt:= streamM.Size DIV (SizeOf (Twertrec)); writeln('Anzahl Datensätze: ',cnt);
streamM.Position:= 0; Daten.count:= cnt; for cntr := 0 to cnt - 1 do begin wert:= TWert.Create; with wert do begin streamM.ReadBuffer(datum,SizeOf(Datum)); streamM.ReadBuffer(Flags, SizeOf(Flags)); streamM.ReadBuffer(Anzahl, SizeOf(Anzahl)); streamM.ReadBuffer(Uebereinstimmungen,SizeOf(Uebereinstimmungen)); end; daten[cntr]:=wert; IF (cntr And $FFFF) = 0 then with Twert(daten[cntr]) do Writeln(cntr:10,FormatDateTime(' DD.MM.YYYY hh:mm:ss.zzz',Datum),Flags:4,Anzahl:12,Uebereinstimmungen:12);
end;
Writeln(Daten.count); finally streamM.Free; streamF.Free; end; end;
begin T0:= now; EinlesenArray; T1:= now; setlength(WerteFeld,0); Writeln(FormatDateTime(' hh:mm:ss.zzz',T1-T0));
T0:= now; EinlesenObject; T1:= now; Writeln(FormatDateTime(' hh:mm:ss.zzz',T1-T0)); readln; End. |