注册 登录
编程论坛 VB6论坛

关于csv文件读取的问题

huangyz_xy 发布于 2019-12-14 10:30, 2445 次点击
Dim bytFile() As Byte, strFile As String, strTmp As String        
        Open Txt_文件 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) / 2
我想用这段代码获取一个csv文件的行数,文件小可以,如果文件大了,比如几百M就会提示“内存溢出”(ReDim bytFile(LOF(1) - 1)),有什么解决办法不?
6 回复
#2
风吹过b2019-12-14 13:00
数组大小的限制,所以会提示溢出。
还是老老实实一行一行的读,然后计数吧。

#3
huangyz_xy2019-12-14 17:12
回复 2楼 风吹过b
,我是为了先读出进度条的分母,那这样的话就不行了!
#4
风吹过b2019-12-14 19:19
可以按读到的总字节数来计算进度。
文件总字节知道的
每读一行,统计该行的字节数,然后再+2个字节
注意是否有中文。
也就是循环里面先显示进度,再读文件,
文件结束退出,差最后一点,直接给100%
#5
huangyz_xy2019-12-14 23:19
回复 4楼 风吹过b
这个是个好方法也,能给个代码不?不知道怎么做啊!我的进度条控件的值是这样的:ProgButton.Value = (Number / n) * 100

[此贴子已经被作者于2019-12-14 23:34编辑过]

#6
风吹过b2019-12-15 16:41
在浏览器里随手写的代码,将就着看吧。

n = LOF(1)         '总字节数,你前面用了。
Do While EOF(1)
    Number = Number + Len(s) + 2            '全英文用这个,2是 vbcrlf 的长度
    'Number = Number + UBound(StrConv(s, vbFromUnicode)) + 2    '含中文用这种,或者自己写一个
    ProgButton.Value = (Number / n) * 100   
   
    Line Input #1, s
    ReDim Preserve strFile(UBound(strFile) + 1)
    strFile(UBound(strFile)) = s   
Loop
    ProgButton.Value = 1                  '直接给到100%
#7
huangyz_xy2019-12-15 17:40
回复 6楼 风吹过b
谢谢,按照你的思路解决问题了!   
 Line Input #1, s
 ReDim Preserve strFile(UBound(strFile) + 1)
 strFile(UBound(strFile)) = s
这几行在以前的代码中定义过,原来如此巧妙!


[此贴子已经被作者于2019-12-15 18:11编辑过]

1