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 + -
显示快捷键?