⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readdatafileut.pas

📁 读取大智慧股票软件中的日线数据进行分析的源代码。代码仅有读取数据部分
💻 PAS
字号:
unit ReadDataFileUt;

interface

uses Windows, Classes, Controls, SysUtils;

type
  TDataRec=class
    code:string;
    rq:TDate;
    kp:single;
    sp:single;
    zg:single;
    zd:single;
    sl:single;
    je:single;
    sgbl:single;
    pgbl:single;
    pgjg:single;
    fh:single;
    IndicateGroups:TStrings;
  end;

  TPSFHRec=class
    code:string;
    rq:TDate;
    sgbl:single;
    pgbl:single;
    pgjg:single;
    fh:single;
  end;

  TCWInfoRec=class
    dm:string;//,代码,code,10,0,0,;" +
    rq:TDate;//,报告期,date,4,0,4,;     +
    gxrq:TDate;//更新日期,date,4,0,0,;     +
    ssrq:TDate;//上市日期,date,4,0,8,;     +
    col1:single;//每股收益,single,4,0,12,;     +
    col2:single;//每股净资产,single,4,0,16,;     +
    col3:single;//净资产收益率,single,4,0,20,;     +
    col4:single;//每股经营现金,single,4,0,24,;     +
    col5:single;//每股公积金,single,4,0,28,;     +
    col6:single;//每股未分配,single,4,0,32,;     +
    col7:single;//股东权益比,single,4,0,36,;     +
    col8:single;//净利润同比,single,4,0,40,;     +
    col9:single;//主营收入同比,single,4,0,44,;     +
    col10:single;//销售毛利率,single,4,0,48,;     +
    col11:single;//调整每股净资产,single,4,0,52,;     +
    col12:single;//总资产,single,4,0,56,;     +
    col13:single;//流动资产,single,4,0,60,;     +
    col14:single;//固定资产,single,4,0,64,;     +
    col15:single;//无形资产,single,4,0,68,;     +
    col16:single;//流动负债,single,4,0,72,;     +
    col17:single;//长期负债,single,4,0,76,;     +
    col18:single;//总负债,single,4,0,80,;     +
    col19:single;//股东权益,single,4,0,84,;     +
    col20:single;//资本公积金,single,4,0,88,;     +
    col21:single;//经营现金流量,single,4,0,92,;     +
    col22:single;//投资现金流量,single,4,0,96,;     +
    col23:single;//筹资现金流量,single,4,0,100,;     +
    col24:single;//现金增加额,single,4,0,104,;     +
    col25:single;//主营收入,single,4,0,108,;     +
    col26:single;//主营利润,single,4,0,112,;     +
    col27:single;//营业利润,single,4,0,116,;     +
    col28:single;//投资收益,single,4,0,120,;     +
    col29:single;//营业外收支,single,4,0,124,;     +
    col30:single;//利润总额,single,4,0,128,;     +
    col31:single;//净利润,single,4,0,132,;     +
    col32:single;//未分配利润,single,4,0,136,;     +
    col33:single;//总股本,single,4,0,140,;     +
    col34:single;//无限售股合计,single,4,0,144,;     +
    col35:single;//A股,single,4,0,148,;     +
    col36:single;//B股,single,4,0,152,;     +
    col37:single;//境外上市股,single,4,0,156,;     +
    col38:single;//其他流通股,single,4,0,160,;     +
    col39:single;//限售股合计,single,4,0,164,;     +
    col40:single;//国家持股,single,4,0,168,;     +
    col41:single;//国有法人股,single,4,0,172,;     +
    col42:single;//境内法人股,single,4,0,176,;     +
    col43:single;//境内自然人股,single,4,0,180,;     +
    col44:single;//其他发起人股,single,4,0,184,;     +
    col45:single;//募集法人股,single,4,0,188,;     +
    col46:single;//境外法人股,single,4,0,192,;     +
    col47:single;//境外自然人股,single,4,0,196,;     +
    col48:single;//优先股或其他,single,4,0,200,    ;
  end;

  TDataLine=class
    DayFileName:string;
    InfoFileName:string;
    StockName:string;
    code:string;
    count:integer;
    DataRecs:TStrings;
    PSFHRecs:TStrings;
    CWInfoRecs:TStrings;
    constructor create;
    procedure ReadDataRecs;
  end;

  TAllDataLine=class
    FileName:string;
    count:integer;
    DataLines:TStrings;
    procedure ReadAllDataRecs;
  end;

  TIndicate=class
    name:string;
    params:array of integer;
    value:single;
//    procedure Calc; virtual;
  end;

  TIndicateGroup=class
    name:string;
    indicates:TStrings;
  end;

implementation

uses functionUt;

constructor TDataLine.create;
begin
  inherited;
  DataRecs:=TStringList.Create;
end;


procedure TDataLine.ReadDataRecs;
var
  iFileHandle :int64;
  iFileLength: int64;
  iBytesRead: Integer;
  Buffer: pointer;
  FStream:TMemoryStream;
  fileoffset:int64;
  AllCount:integer;
  StockSeq,BlockSeq,RecSeq,BlockPos:integer;
  finded:boolean;
  DataRec:TDataRec;
  BlockNo:word;
begin
  iFileHandle := FileOpen(DayFileName, fmOpenRead);
  if iFileHandle=-1 then
  begin
//    showmessage('文件打开失败');
    exit;
  end;
  try
    fileoffset:=0;
    iFileLength := LongFileSeek(iFileHandle,fileoffset,2);
    fileclose(iFileHandle);
    FStream:=TMemoryStream.Create;
    FStream.SetSize(iFileLength);
    FStream.LoadFromFile(DayFileName);
    AllCount:=ReadStreamInt(FStream,20,0);
    StockSeq:=0;
    while (StockSeq<= AllCount-1)or  finded do
    begin
      if Code=ReadStreamChar(FStream,24+StockSeq*64,10,0) then
      begin
        self.count:=ReadStreamWord(FStream,24+StockSeq*64+10,0);
        BlockSeq:=0;
        RecSeq:=0;
        while BlockSeq<25 do
        begin
          BlockNo:=ReadStreamWord(FStream,24+StockSeq*64+14+(BlockSeq-1)*2,0);
          if BlockNo=65535 then
            break;
          BlockPos:=0;
//          while (RecSeq<=self.count) and (BlockPos<256) do
          while (RecSeq<=100) and (BlockPos<256) do
          begin
            DataRec:=TDataRec.Create;
            DataRec.code:=code;
            DataRec.rq:=strtodate('1970-1-1')+ReadStreamInt(FStream,266240+BlockNo*8192+BlockPos*32,0)/86400;
            DataRec.kp:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+4,0);
            DataRec.zg:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+8,0);
            DataRec.zd:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+12,0);
            DataRec.sp:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+16,0);
            DataRec.sl:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+20,0);
            DataRec.je:=ReadStreamSingle(FStream,266240+BlockNo*8192+BlockPos*32+24,0);
            self.DataRecs.AddObject(code+'-'+datetostr(DataRec.rq),DataRec);
            RecSeq:=RecSeq+1;
            BlockPos:=BlockPos+1;
          end;
          BlockSeq:=BlockSeq+1;
        end;
        break;
      end;
      StockSeq:=StockSeq+1;
    end;

  finally

    FStream.Free;
  end;
end;

procedure TAllDataLine.ReadAllDataRecs;
var
  iFileHandle :int64;
  iFileLength: int64;
  iBytesRead: Integer;
  Buffer: pointer;
  FStream:TMemoryStream;
  fileoffset:int64;
  AllCount,i:integer;
  StockSeq:integer;
  DataLine:TDataLine;
begin
  iFileHandle := FileOpen(FileName, fmOpenRead);
  try
    fileoffset:=0;
    iFileLength := LongFileSeek(iFileHandle,fileoffset,2);
    LongFileSeek(iFileHandle,0,0);
    FStream:=TMemoryStream.Create;
    FStream.SetSize(iFileLength);
    FStream.LoadFromFile(FileName);
    AllCount:=ReadStreamInt(FStream,24,0);
    StockSeq:=0;
    while (StockSeq<= AllCount-1) do
    begin
      DataLine:=TDataLine.Create;
      DataLine.DayFileName:=self.FileName;
      DataLine.code:=ReadStreamChar(FStream,24+StockSeq*64,10,0);
      self.DataLines.AddObject(DataLine.code,DataLine);
      StockSeq:=StockSeq+1;
    end;
  finally
    fileclose(iFileHandle);
    FStream.Free;
  end;
  for i:=0 to self.DataLines.Count-1  do
    TDataLine(self.DataLines[i]).ReadDataRecs;

end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -