使用TFileStream读取文件,分析自定义结构的数据文件。

TFileStream对文本读取的操作。有个竞争对手的数据是他们自己写的结构体,然后存成一个文件。我就是用了一个小工具,解读出他们的结构体,然后做了个循环,把它们的数据都读出来的。

好在他们的文件没有加密。

分析的小工具呢,我上传的资源里面有。其规则如下:

字符串的存储是,一个Byte和一个String一起保存的。比如“Love”存在文件中,是先保存一个值为4的Byte,再保存“Love”这个字符串。

Double的存储,是直接保存一个8位。

Integer保存一个4位的值。

 

假如它们的表结构如下:

ID integer;

aName:varchar(255);

Count:double;

当然这个结构先要用工具分析出来。就上面写的那个。这个简单的比方,如果没有加密,明眼人一下就能看出来的。

然后写个程序循环读出数据来就好了。比方只读其中一个:

type ReadD=record

 ReadID:integer;

ReadName:array[0..1023]of char;

ReadCount:double;

end;

 

var

 RD:ReadD;

ln:byte;

 

//create打开文件

Files.read(RD.Readid,sizeof(integer));

Files.read(ln,sizeof(ln));

Files.read(RD.ReadName,ln);

Files.read(RD.ReadCount,sizeof(double));

 

就读出一条记录啦。

通常使用这种方式存储字符串的。比较省空间。而且有时候使用这种方法,插入空白区域。

 

readID

 定义部分:

var
  sel:Integer;
  buf:array[0..1023]of char;
  ln:byte;
  i,p1,p2,ep:integer;
  Rstr:string;
  Rint:Integer;
  Rdouble:Double;
  Rbyte:Byte;          

函数体主要部分:

       Files.Position:=i;
            Files.Read(ln,sizeof(ln));
            if i+ln>ep then exit;
            Files.Read(buf,ln);
            rstr:=buf;
            mmo1.Lines.Add('Pos:'+inttostr(i)+'  Len:'+inttostr(Ln)+'  Str:'+rstr);

           Files.Position:=i;
           Files.Read(rint,sizeof(rint));
           mmo1.Lines.Add('Pos:'+inttostr(i)+'  Int:'+inttostr(rint));

            Files.Position:=i;
             Files.Read(rdouble,sizeof(rdouble));
              mmo1.Lines.Add('Pos:'+inttostr(i)+'  Dbl:'+floattostr(rdouble));

           Files.Position:=i;
           Files.Read(ln,sizeof(ln));
            mmo1.Lines.Add('Pos:'+inttostr(i)+'  byte:'+inttostr(ln));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值