注册 登录
编程论坛 VB6论坛

VB读取CSV文件,提高效率的问题

smli_09 发布于 2017-02-14 21:43, 6902 次点击
VB读取CSV文件(40列,大概8000行)。采用逐行用Split函数读取的方法,存入40个组合框中。目前已经做出来了,但是耗时30秒,感觉画的时间有点长。
需要的是其中的约1000行数据,但是需要把数据都读取出来,才能判断所需数据的起止位置
请问:有没有优化的方法?①是读取的方法不行?曾经在百度上求助,有人说可以用读取数据库的方法。②还是读入到组合框Combo之中不合适?
代码如下(代码不用细看,主要是想说明是使用split读取的):
csvfile = App.Path & "\" & Text10.Text & "\" & Combo3.List(k) 'CSV文件路径与用户名
Open csvfile For Input As #1 '打开文件
Do While Not EOF(1) '判断是否到达文件尾部
ReDim Preserve f(i) '重新定义数组上标
Line Input #1, f(i) '读取整行数据
For j = 0 To 30
 If Val(Form3.Text3(j)) > 0 Then
 ls = Split(f(i), ",")(Form3.Text3(j)) '读取这行数据按逗号分隔的第二个数据,0是第一个数据
ls = Replace(ls, """", "") '如果数据希望去除两边的双引号可以添加这行代码
(j).AddItem ls
 End If
Next
End If
i = i + 1 '行数加1
Loop '循环
Close #1
2 回复
#2
风吹过b2017-02-14 22:05
你测试了你的代码慢在哪些地方吗?
在vb里,读写控件属性为慢速操作,密集使用时,建议把属性先读到数组里,然后再使用数组里的数据。
以下代码在手机上改的,错误难免
dim fjtmp() , t3(30) as  long
for  j =0 to 30
t3(j)=Val(Form3.Text3(j))
next j

csvfile = App.Path & "\" & Text10.Text & "\" & Combo3.List(k) 'CSV文件路径与用户名
Open csvfile For Input As #1 '打开文件
Do While Not EOF(1) '判断是否到达文件尾部
ReDim Preserve f(i) '重新定义数组上标
Line Input #1, f(i) '读取整行数据
fjtmp = split(f(i),",")    '先分解
For j = 0 To 30
 If t3(j)> 0 Then
 ls = fjtmp(t3(j))       '取数据
ls = Replace(ls, """", "") '如果数据希望去除两边的双引号可以添加这行代码
(j).AddItem ls
 End If
Next
End If
i = i + 1 '行数加1
Loop '循环
Close #1
#3
smli_092017-02-17 10:33
谢谢了,我测试了很久,楼上的方法确实可行,但是效率提高的不算多。真正耗时的,是组合框 AddItem这部分。这部分的时间占了总时间的2/3以上。
1