请哪位高手达人不吝赐教,能否告知VB中有无快速读取文件中指定行数据的函数。 谢谢 20
突发其想想用VB做个能解析SQL的数据库程序。主要有几个问题自己想一想。一。文件的存储方式在文件的存储碰到的问题为1。选择何种存储格式与方式。众所周知,一般VB写入文件的...
突发其想想用VB做个能解析SQL的数据库程序。
主要有几个问题自己想一想。
一。文件的存储方式
在文件的存储碰到的问题为
1。选择何种存储格式与方式。
众所周知,一般VB写入文件的格式或方式有OUTPUT,Random,binary和FileSystemObject,其中Random和binary都为PUT写入方式,而OUTPUT为Print和write
一个为逗号分隔,一个为TAB符分隔,FileSystemObject与OUTPUT写入文件方式类似,也为字段和字符行写入。
经过我每个方式测试,每个方式写入一百万条记录,每个记录有10个字段,并字段的长短不一随机而定,但不区分类型,都以字符串类型写入。
其中OUTPUT以逗号方式写入和FileSystemObject是最快的速度差不多,用TAB符就要慢点,binary为第二,Random方式是最慢的因为Random方式是定长写入的。
我想基本上数据的写入方式和储存格式,因该就是这样吧,最多格式上应该可以优化和压缩。
二。文件的读取和快速查找内容
这个就比较麻烦了,我仔细的研究了下,比如我要在那个写入一百万条记录的文件里寻找一条记录,其寻找第一条记录和最后条记录的时间是不同的
除Random方式读取文件可指定记录号,其他方式如INPUT,Binary和FileSystemObject都是一行一行读取或是扫描文件,直到找到你要的数据,当然也有牛人把整个文件读入内存,
并用指针的方式,快速查找到,需要的内容。
关于这个我有个最大的问题想问下各位数据库高手,比如说一条记录中我定义了一个主键或是索引字段,我程序启动把这个字段所有数据都读入内存,我用快速查找算法,或是B树算法找到了此值并直到了对应的行号,或是说数据的位置,那我如何快速在文件中找到此行并快速读取出此条记录的所有信息呢,难道只有扫描整个文件从头开始读取,一直读到我要的那行吗,没有办法直接读取指定的那行数据吗?
我知道Random方式读取数据可以指定记录位置读取,可它只能读取定长的数据,我是想问用INPUT,Binary或是FileSystemObject,是否可以快速读取指定行的数据,就像指针快速指到那行数据,并读取整条记录到变量当中,不要再重头开始一行行往下读,直到读到需要数据,这样速度太慢。
我在网上找了很多例子,和也看了些开源数据库他们的源代码。
我现在能想到的也是把整个表读入内存,让程序在内存中查找数据,这样速度可以很快。但问题是这样的话,当文件越大时,对内存的消耗也越大。
网上也有很多这样查找大文件里数据的例子,但我还是希望能直接读到我指定的那行记录数据信息。
请哪位高手达人不吝赐教,能否告知VB中有无快速读取文件中指定行数据的函数。
谢谢 展开
主要有几个问题自己想一想。
一。文件的存储方式
在文件的存储碰到的问题为
1。选择何种存储格式与方式。
众所周知,一般VB写入文件的格式或方式有OUTPUT,Random,binary和FileSystemObject,其中Random和binary都为PUT写入方式,而OUTPUT为Print和write
一个为逗号分隔,一个为TAB符分隔,FileSystemObject与OUTPUT写入文件方式类似,也为字段和字符行写入。
经过我每个方式测试,每个方式写入一百万条记录,每个记录有10个字段,并字段的长短不一随机而定,但不区分类型,都以字符串类型写入。
其中OUTPUT以逗号方式写入和FileSystemObject是最快的速度差不多,用TAB符就要慢点,binary为第二,Random方式是最慢的因为Random方式是定长写入的。
我想基本上数据的写入方式和储存格式,因该就是这样吧,最多格式上应该可以优化和压缩。
二。文件的读取和快速查找内容
这个就比较麻烦了,我仔细的研究了下,比如我要在那个写入一百万条记录的文件里寻找一条记录,其寻找第一条记录和最后条记录的时间是不同的
除Random方式读取文件可指定记录号,其他方式如INPUT,Binary和FileSystemObject都是一行一行读取或是扫描文件,直到找到你要的数据,当然也有牛人把整个文件读入内存,
并用指针的方式,快速查找到,需要的内容。
关于这个我有个最大的问题想问下各位数据库高手,比如说一条记录中我定义了一个主键或是索引字段,我程序启动把这个字段所有数据都读入内存,我用快速查找算法,或是B树算法找到了此值并直到了对应的行号,或是说数据的位置,那我如何快速在文件中找到此行并快速读取出此条记录的所有信息呢,难道只有扫描整个文件从头开始读取,一直读到我要的那行吗,没有办法直接读取指定的那行数据吗?
我知道Random方式读取数据可以指定记录位置读取,可它只能读取定长的数据,我是想问用INPUT,Binary或是FileSystemObject,是否可以快速读取指定行的数据,就像指针快速指到那行数据,并读取整条记录到变量当中,不要再重头开始一行行往下读,直到读到需要数据,这样速度太慢。
我在网上找了很多例子,和也看了些开源数据库他们的源代码。
我现在能想到的也是把整个表读入内存,让程序在内存中查找数据,这样速度可以很快。但问题是这样的话,当文件越大时,对内存的消耗也越大。
网上也有很多这样查找大文件里数据的例子,但我还是希望能直接读到我指定的那行记录数据信息。
请哪位高手达人不吝赐教,能否告知VB中有无快速读取文件中指定行数据的函数。
谢谢 展开
3个回答
展开全部
用binary如get #1,i,a 解释i就是文件中的第几个数据读取到a变量,如果a是变量数组就是从i个数据开始一个一个往后自动放入a数组直到a放满为止,用数组读取比一个一个的读取要会快一些,注意a是byte类型,a是数组的话就要明确元素上下标后再用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上正解。你需要知道你数据所在的位置,因为你每行的数据时不定长的,所以需要做一个文件表,写入行的信息,给定行号后,通过这个文件表获得你需要数据的位置与长度,再用Binary读取。 当然这个文件表放哪都行,可以另外做一个文件或者放置于你这个大文件的文件头部。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于大文件 你可能需要一个文件表 在存储时要把每行的 行号 字节长度 存入文件开始 读文件时就查找相应行号 然后将该行号以前的行字节相加得到总偏移量 然后再根据本行字节长度读取相应数据 这种方式使用二进制更为方便快捷省空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询