大家能不能给出一下代码,我的文本文件有几十万行

解决方案 »

  1.   

    Cn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=F:\;Extensions=asc,csv,tab,txt;"
       Cn.Open
       Dim Rst As New ADODB.Recordset
       Dim Sql As String
       Sql = "select * from TEST.txt"
       Rst.CursorLocation = adUseClient
       Rst.Open Sql, Cn, adOpenStatic, adLockPessimistic
       行數=rst.RecordCount+1
      

  2.   

    自己可以去優化一下SQL語句
    如:select count(*) as rows from text.txt
      

  3.   

    MsgBox CreateObject("scripting.FileSystemObject").OpenTextFile("c:\test.txt", 8).Line
      

  4.   

    学习!楼上的faysky2(出来混,迟早是要还嘀) 方法真妙!
      

  5.   

    哦天呢,
    你可以通过OPEN语句打开文件,然后用行读的办法读一下,并且在其中设置一个变量来计算读了多少行也就是类似下面代码Option ExplicitPrivate Sub Form_Load()
    Dim hT1 As Integer, hCount As Integer, hFreeNumber As Integer
    Dim tmp As String
    hFreeNumber = FreeFile
    Open "c:\BOOT.INI" For Input As #hFreeNumber
        While Not EOF(hFreeNumber)
            Line Input #hFreeNumber, tmp
            hCount = hCount + 1
            If tmp = "" Then hCount = hCount - 1
        Wend
    Close #hFreeNumber
    MsgBox hCount
    End Sub
      

  6.   

    不错不错,可是我这个该死的VB怎么搞的,FileSystemObject对象不行了呢。。刚才还试了试非常晕
      

  7.   

    最快的方法来了Dim lngLineCount As Long'行数
    Dim strFileName As String'文件路径
    lngLineCount = 1
    strFileName = "C:\test.txt"'缓冲区长度,最佳值根据不同的系统来定
    '应该是4096的倍数
    Dim lngBufferSize As Long
    lngBufferSize = 262144ReDim abytBuffer(lngBufferSize - 1) As Byte
    Dim lngRemain As Long, i As Long
    Open strFileName For Binary Access Read As #1
    lngRemain = LOF(1)
    While lngRemain > 0
        If lngRemain < lngBufferSize Then
            lngBufferSize = lngRemain
            ReDim abytBuffer(lngBufferSize - 1)
        End If
        Get #1, , abytBuffer
        lngRemain = lngRemain - lngBufferSize
        For i = 0 To lngBufferSize - 1
         If abytBuffer(i) = 13 Then lngLineCount = lngLineCount + 1
        Next
    Wend
    Close #1
    Erase abytBufferMsgbox "行数是" & lngLineCount
      

  8.   

    根据我的测试,viena(维也纳nn [IQ=50,EQ<0]) 大哥,你的方法不是很快,我用一个80M的字典(有1000多万行)测试,你的方法要13秒左右,而faysky2(出来混,迟早是要还嘀)大哥的方法只要5秒。
      

  9.   

    给你一个不用引用外部控件,并且速度很快的方法,我没有大文件,你可试一下。Private Sub Command1_Click()
        Dim strTmp As String, arrTmp As Variant
        
        Open "D:\临时目录\新建 文本文档.txt" For Input As #1
        strTmp = StrConv(InputB$(LOF(1), 1), vbUnicode)
        Close #1
        
        arrTmp = Split(strTmp, vbCrLf)
        MsgBox "文件行数:" & UBound(arrTmp)
    End Sub
    ╭═══════════════════╮
    ║ 免费的源码、工具网站,欢迎大家访问!║
    ║ http://www.j2soft.cn/        ║
    ╰═══════════════════╯
      

  10.   

    楼上,这个方法是最慢的
    详见
    http://community.csdn.net/Expert/topic/4825/4825949.xml
      

  11.   

    按理说我的方法应该是最快的,但具体情况不同也会影响测试结果的
    比如CPU速度、内存速度、磁盘访问速度以及缓冲区的大小,
    测试文件是否有很多很短的行组成等等不知道FSO内部是怎么实现的~
      

  12.   

    理论上viena的方法应该是最快的,影响性能的地方可能出在:
    缓冲区的大小,以及VB语言实现的问题吧?