现在的位置: 首页 > 综合 > 正文

如何读取超大文本文件

2013年10月05日 ⁄ 综合 ⁄ 共 1148字 ⁄ 字号 评论关闭

要使用超大的文本文件进行业务处理,有近10M大小,超过17万行, 1.如何才能读取超过17万行的文本文件,2.如何把它每2000个分成1个小文本文件

看来所谓的行,就是记录。
数组的上限似乎可以大于17万。
可不一定全部读入,打开文件后,按记录要求只读入游泳的,就简单多了。
还可以考虑,使用ado技术,把文本文件作为数据库处理。

分割文件,在我看来是“得不偿失”的做法。

1、用普通文件读取,读一句对比一句,或者是读取到需要的值(也就是查找),再来对比,不用全部加载到内存中(即是用变量读出来);
2、读入到数据库中,再进行相应的处理。建议用ADODC和Datagrid控件,不推荐用MSFlexgrid和MSHFlexgrid控件,Datagrid控件只会加载当前记录以及前后少量记录,需要的时候才会动态读取,就算你有100万行对内存也影响不大。

楼主最好稍微详细点说明一下数据的组成及如何对比(处理),可能更易找到解决之道。

 

可以偿试当数据库来读,数据库引擎不会一次将所有记录在入内存,而是根据需要来进行磁盘交换:

    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    Set cn = New ADODB.Connection
    
    '打开连接,只要指定文本文件所在目录
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
        & "Data Source=c:/txttest/;" _
        & "Extended Properties= ""text;HDR=No;FMT=Delimited """
        
    '打开记录集
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient        '这个必须是客户端游标,不然AbsolutePosition属性不可用
    rs.Open "SELECT * FROM [t.txt]", cn    '指定文本文件名称

    '定位到第20000行
    rs.AbsolutePosition = 20000
    Debug.Print rs.Fields(0)
    
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

如果用rs.movenext来循环读取数据,这样你可以很简单的将文件分隔成20000行的小文件。用这种方法可以注释掉rs.CursorLocation = adUseClient,这样默认是服务器端游标,性能应该会更好点。

 

抱歉!评论已关闭.