functionut.pas
来自「读取大智慧股票软件中的日线数据进行分析的源代码。代码仅有读取数据部分」· PAS 代码 · 共 282 行
PAS
282 行
unit FunctionUt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes;
function ReadStreamDatetime(var stream:TMemoryStream;offset:Longint;origin:integer):TDatetime;
function ReadStreamfloat(var stream:TMemoryStream;offset:Longint;origin:integer):double;
function ReadStreamsingle(var stream:TMemoryStream;offset:Longint;origin:integer):single;
function ReadStreambit(var stream:TMemoryStream;offset:Longint;ByteCnt:integer;bitoffset:integer;origin:integer):boolean;
function ReadStreammoney(var stream:TMemoryStream;offset:Longint;origin:integer):currency;
function ReadStreamchar(var stream:Tmemorystream;offset,length:integer;origin:integer):string;//(流,偏移量,字节数)
function ReadStreamDecimal(var stream:Tmemorystream;offset,length,xs:integer;origin:integer):real;
function ReadStreamsmallint(var stream:TMemoryStream;offset:Longint;origin:integer):smallint;
function ReadStreamint(var stream:TMemoryStream;offset:Longint;origin:integer):integer;
function ReadStreambyte(var stream:TMemoryStream;offset:Longint;origin:integer):byte;
function ReadStreamword(var stream:TMemoryStream;offset:Longint;origin:integer):word;
function ReadStreamDWord(var stream:TMemoryStream;offset:Longint;origin:integer):DWord;
function LongFileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64;
function ReadStreamNullMap(var stream:TMemoryStream;offset:Longint;bitoffset:integer;origin:integer):boolean;
implementation
function ReadStreamDatetime(var stream:TMemoryStream;offset:Longint;origin:integer):TDatetime;
var
timebuffer:pointer;
datebuffer:pointer;
begin
try
stream.Seek(offset,origin);
datebuffer:=allocmem(4);
timebuffer:=allocmem(4);
stream.readbuffer(timebuffer^,4);
stream.readbuffer(datebuffer^,4);
result:=integer(datebuffer^)+2+integer(timebuffer^)/300/3600/24;
finally
freemem(datebuffer);
freemem(timebuffer);
end;
end;
function ReadStreamfloat(var stream:TMemoryStream;offset:Longint;origin:integer):double;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(8);
stream.readbuffer(buffer^,8);
result:=double(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreamsingle(var stream:TMemoryStream;offset:Longint;origin:integer):single;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(4);
stream.readbuffer(buffer^,4);
result:=single(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreambit(var stream:TMemoryStream;offset:Longint;ByteCnt:integer;bitoffset:integer;origin:integer):boolean;
var
buffer:pointer;
a: byte;
ByteNo:integer;
BitPos:integer;
begin
ByteNo:=(bitoffset div 8)+1;
BitPos:=bitoffset mod 8;
try
stream.Seek(offset+ByteCnt-ByteNo,origin);
buffer:=allocmem(1);
stream.readbuffer(buffer^,1);
case Bitpos of
7: a:=128;
6: a:=64;
5: a:=32;
4: a:=16;
3: a:=8;
2: a:=4;
1: a:=2;
0: a:=1;
end;
result:=(byte(buffer^)and a = a);
finally
freemem(buffer);
end;
end;
function ReadStreamNullMap(var stream:TMemoryStream;offset:Longint;bitoffset:integer;origin:integer):boolean;
var
buffer:pointer;
a: byte;
ByteNo:integer;
BitPos:integer;
begin
ByteNo:=(bitoffset-1) div 8;
BitPos:=(bitoffset-1) mod 8;
try
stream.Seek(offset+ByteNo,origin);
buffer:=allocmem(1);
stream.readbuffer(buffer^,1);
case Bitpos of
7: a:=128;
6: a:=64;
5: a:=32;
4: a:=16;
3: a:=8;
2: a:=4;
1: a:=2;
0: a:=1;
end;
result:=(byte(buffer^)and a = a);
finally
freemem(buffer);
end;
end;
function ReadStreammoney(var stream:TMemoryStream;offset:Longint;origin:integer):currency;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(8);
stream.readbuffer(buffer^,8);
result:=(int64(buffer^)/10000);
finally
freemem(buffer);
end;
end;
function ReadStreamchar(var stream:Tmemorystream;offset,length:integer;origin:integer):string;//(流,偏移量,字节数)
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(length);
stream.readbuffer(buffer^,length);
result := copy(string(pchar(buffer)),1,length);
finally
freemem(buffer);
end;
end;
function ReadStreamint(var stream:TMemoryStream;offset:Longint;origin:integer):integer;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(4);
stream.readbuffer(buffer^,4);
result:=integer(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreamsmallint(var stream:TMemoryStream;offset:Longint;origin:integer):smallint;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(2);
stream.readbuffer(buffer^,2);
result:=smallint(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreamDecimal(var stream:Tmemorystream;offset,length,xs:integer;origin:integer):real;//(流,偏移量,字节数4,小数位)
var
buffer,FH:pointer;
i,m1:integer;
xsw:extended;
begin
try
stream.Seek(offset,origin);
FH :=allocmem(1);
stream.readbuffer(FH^,1);
if byte(FH^)=0 then
m1 := -1
else
m1 := 1;
case xs of
1: xsw := 0.1;
2: xsw := 0.01;
3: xsw := 0.001;
4: xsw := 0.0001;
5: xsw := 0.00001;
6: xsw := 0.000001;
7: xsw := 0.0000001;
8: xsw := 0.00000001;
9: xsw := 0.000000001 ;
else
xsw:=1.00;
end;
//数值
stream.Seek(offset+1,origin);
buffer :=allocmem(length-1);
stream.readbuffer(buffer^,length-1);
result:= int64(buffer^)*m1*xsw;
finally
freemem(buffer);
freemem(FH);
end;
end;
function ReadStreambyte(var stream:TMemoryStream;offset:Longint;origin:integer):byte;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(1);
stream.readbuffer(buffer^,1);
result:=byte(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreamword(var stream:TMemoryStream;offset:Longint;origin:integer):word;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(2);
stream.readbuffer(buffer^,2);
result:=word(buffer^);
finally
freemem(buffer);
end;
end;
function ReadStreamDWord(var stream:TMemoryStream;offset:Longint;origin:integer):DWord;
var
buffer:pointer;
begin
try
stream.Seek(offset,origin);
buffer:=allocmem(4);
stream.readbuffer(buffer^,4);
result:=dword(buffer^);
finally
freemem(buffer);
end;
end;
function LongFileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64;
//{$IFDEF MSWINDOWS}
begin
Result := Offset;
Int64Rec(Result).Lo := SetFilePointer(THandle(Handle), Int64Rec(Result).Lo,
@Int64Rec(Result).Hi, Origin);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?