如何读取超大文本文件

要使用超大的文本文件进行业务处理,有近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,这样默认是服务器端游标,性能应该会更好点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值