使用TFileStream读取文件,分析自定义结构的数据文件。
2011-03-07 23:11
423 查看
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));
好在他们的文件没有加密。
分析的小工具呢,我上传的资源里面有。其规则如下:
字符串的存储是,一个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));
相关文章推荐
- ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- 使用JAVA读取EXCEL文件里面的数据
- 使用BufferedReader的readLine方法读取文件的每一行数据
- 检查存储结构-控制、REDO日志、表空间使用情况、数据文件等信息脚本--HTML
- spring读取资源文件时自定义数据类型转换---CustomEditorConfigurer
- 从CSV文件中读取数据,使用逗号','分割问题
- XFS文件系统结构分析-XFS数据恢复篇
- 第三章数程序设计初步--控制结构综合项目4-1文件操作初体验练习1从文件读取数据
- Hibernate使用自定义脚本替换注解或者xml文件中的自动生成表结构
- 自定义配置Outlook使用现有数据文件
- iOS 数据持久化 NSUserDefault 的使用 NSUserDefaults读取和写入自定义对象
- 使用JAVA读取EXCEL文件里面的数据
- 使用JDBC连接MySQL数据库--典型案例分析(一)---员工数据读取与操作
- 如何使用opencv的c++接口来读取、写结构体数组到yml文件中
- Hibernate使用自定义脚本替换注解或者xml文件中的自动生成表结构
- Jmeter使用CSV文件读取大量测试数据
- BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库
- HDFS读文件过程分析:读取文件的Block数据
- Ogre数据文件结构分析