怎么快速得到csv文件的行数?

浩洁 2013-03-29 01:57:51
Open SystemSet.PlaneXL.Text For Input As #1
Line Input #1, strFile
SystemSet.Progress.Min = 0
SystemSet.Progress.Max = UBound(Split(Input$(LOF(1), 1), vbCrLf))


因为后面还要实际需要的循环,在不循环的情况下想得到这个文件的行数做为进展条的显示,在网上看到这么一个语句说可以得到它的行数,但是提示实时错误62,输入超出文件尾。
...全文
3671 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩洁 2013-03-29
  • 打赏
  • 举报
回复
谢谢大家给的答复,真是太好的程序,只是分不够给。
of123 2013-03-29
  • 打赏
  • 举报
回复
第三种,引用 Microsoft ActiveX Data Object Library 2.8

Private Sub Command1_Click()
Dim cn As ADODB.Connection, rs As ADODB.Recordset

Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files\Microsoft Visual Studio\VC98\Lib\;Extended Properties=""TEXT;HDR=Yes;FMT=Delimited"""
Set rs = New ADODB.Recordset

rs.Open "select * from WIN32API.csv", cn

rs.MoveLast

MsgBox rs.RecordCount
End Sub
查出的行数比第一种少一行。因为第一行表头不算记录。
东方之珠 2013-03-29
  • 打赏
  • 举报
回复
2种方法: 第1种:
Option Explicit

Private Sub Command1_Click()
    Dim FileNumber As Long, Filebyte() As Byte, Arr() As String
    
    FileNumber = FreeFile
    Open "D:\GreenSoft\easyMule\config\ip-to-country.csv" For Binary As #FileNumber   '打开CSV文件
    ReDim Filebyte(1 To LOF(FileNumber))
    Get #FileNumber, , Filebyte
    Arr = Split(StrConv(Filebyte, vbUnicode), vbCrLf)
    Debug.Print UBound(Arr) '取得数据行数
    Close #FileNumber
    
End Sub
第2种: 这种用Excel方法打开,行数不能超过65536行,否则用第1种.
'引用对象库:Microsoft Excel 11.0 Object Library
Option Explicit

Private Sub Command1_Click()
        
        On Error GoTo Errhandler
        
        Dim xlExcel As New Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        
        xlExcel.Application.Visible = False
        xlExcel.Workbooks.Open "D:\GreenSoft\easyMule\config\ip-to-country.csv" '打开CSV文件
        xlExcel.Workbooks(1).Activate
        Set xlSheet = xlExcel.Workbooks(1).Worksheets(1) 'Sheet1表
        xlSheet.Activate '激活Sheet1表
        Debug.Print xlExcel.ActiveSheet.UsedRange.Rows.Count '取有效数据行数
        
        xlBook.Close
        xlExcel.Quit
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlExcel = Nothing
        
Errhandler:
        Exit Sub
End Sub
of123 2013-03-29
  • 打赏
  • 举报
回复
改一下: n = (LenB(strFile) - LenB(strTmp)) / 4
of123 2013-03-29
  • 打赏
  • 举报
回复
还有一种方法,读整个文件到一个字符串,测试去除换行符前后的长度差,得到行数。

Private Sub Command1_Click()
Dim bytFile() As Byte, strFile As String, strTmp As String
Dim n As Long

Open "D:\Program Files\Microsoft Visual Studio\VC98\Lib\WIN32API.CSV" For Binary As #1
ReDim bytFile(LOF(1) - 1)
Get #1, , bytFile
Close #1

strFile = StrConv(bytFile, vbUnicode)

strTmp = Replace(strFile, vbCrLf, "")

n = (LenB(strFile) - LenB(strTmp)) / 2 + 1
MsgBox n
End Sub
浩洁 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
如果是标准的 .csv 文件,可以用 ADO 作为外部数据库访问。查询后,获取记录集的行数即可。
什么样的是标准的?我的这个CSV文件不是每一个逗号前面都有内容,但是每行第4个逗号前肯定是有内容的(大写英文+数字),但是每一行最后一个逗号后面有的是空的有的是中文有的是英文
浩洁 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
如果是标准的 .csv 文件,可以用 ADO 作为外部数据库访问。查询后,获取记录集的行数即可。
我是新生,不懂,能不能写详细的?
of123 2013-03-29
  • 打赏
  • 举报
回复
如果是标准的 .csv 文件,可以用 ADO 作为外部数据库访问。查询后,获取记录集的行数即可。

7,771

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧