要使用超大的文本文件进行业务处理,有近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*FROM[t.txt]",cn'指定文本文件名称 '定位到第20000行 rs.AbsolutePosition=20000 Debug.Printrs.Fields(0) rs.Close Setrs=Nothing cn.Close Setcn=Nothing 如果用rs.movenext来循环读取数据,这样你可以很简单的将文件分隔成20000行的小文件。用这种方法可以注释掉rs.CursorLocation=adUseClient,这样默认是服务器端游标,性能应该会更好点。 |