如何读取超⼤⽂本⽂件
要使⽤超⼤的⽂本⽂件进⾏业务处理,有近10M⼤⼩,超过17万⾏,1.如何才能读取超过17万⾏的⽂本⽂件,2.如何把它每2000个分成1个⼩⽂本⽂件
看来所谓的⾏,就是记录。
数组的上限似乎可以⼤于17万。
可不⼀定全部读⼊,打开⽂件后,按记录要求只读⼊游泳的,就简单多了。
还可以考虑,使⽤ado技术,把⽂本⽂件作为数据库处理。
分割⽂件,在我看来是“得不偿失”的做法。
1、⽤普通⽂件读取,读⼀句对⽐⼀句,或者是读取到需要的值(也就是查),再来对⽐,不⽤全部加载到内存中(即是⽤变量读出来);
2、读⼊到数据库中,再进⾏相应的处理。建议⽤ADODC和Datagrid控件,不推荐⽤MSFlexgrid和MSHFlexgrid控件,Datagrid控件只会加载当前记录以及前后少量记录,需要的时候才会动态读取,就算你有100万⾏对内存也影响不⼤。
楼主最好稍微详细点说明⼀下数据的组成及如何对⽐(处理),可能更易到解决之道。
可以偿试当数据库来读,数据库引擎不会⼀次将所有记录在⼊内存,⽽是根据需要来进⾏磁盘交换:
DimcnAsADODB.Connection,rsAsADODB.Recordset
Setcn=NewADODB.Connection
'打开连接,只要指定⽂本⽂件所在⽬录
cn.Open"Provider=Microsoft.Jet.OLEDB.4.0;"_
&"DataSource=c:/txttest/;"_
&"ExtendedProperties=""text;HDR=No;FMT=Delimited"""
'打开记录集
Setrs=NewADODB.Recordset
rs.CursorLocation=adUseClient'这个必须是客户端游标,不然AbsolutePosition属性不可⽤
rs.Open"SELECT*]",cn'指定⽂本⽂件名称
'定位到第20000⾏
rs.AbsolutePosition=20000
大文件发送Debug.Printrs.Fields(0)
rs.Close
Setrs=Nothing
cn.Close
Setcn=Nothing
如果⽤rs.movenext来循环读取数据,这样你可以很简单的将⽂件分隔成20000⾏的⼩⽂件。⽤这种⽅法可以注释掉rs.CursorLocation=adUseClient,这样默认是服务器端游标,性能应该会更好点。
发布评论