vb读取csv
这种方式为什么读取大数据csv时,文本框输出特别慢Private Sub Command6_Click()
Dim TextLine
Dim TextString
Dim SplitStr As Variant
Dim SplitStr2 As Variant
Dim i As Long, j As Long
Dim s As String
Dim m, n As Integer
Dim a() As String
Open "DATAFILE.CSV" For Input As #1 ' 打开文件。
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。
If TextString = "" Then
TextString = TextLine
Else
TextString = TextString & ";" & TextLine
End If
Loop
Close #1 ' 关闭文件。
SplitStr = Split(TextString, ";")
m = UBound(SplitStr)
For i = 0 To m
SplitStr2 = Split(SplitStr(i), ",")
n = UBound(SplitStr2)
ReDim a(0 To m, 0 To n)
For j = 0 To n
a(i, j) = SplitStr2(j)
Text1.Text = Text1.Text + a(i, j) & " "
Next j
Text1.Text = Text1.Text & vbCrLf
Next i
End Sub 我已经和你说了。
先用一个变量保存,最后一次性设置给文本框,你没看? 我已经和你说了。
先用一个变量保存,最后一次性设置给文本框,你没看?
哦,哦我看了,
dim i as long dim str as string, r as string dim data() as string, lines() as string open "xxx.csv" for input as #1 str = input(lof(1), 1) close #1 lines = split(str, vbcrlf) for i = lbound(lines) to ubound(lines) data = split(lines(i), ",") if i = lbound(lines) then r = data(0) & " " & data(1) & " " & data(3) & " " & data(4) else r = r & vbcrlf & data(0) & " " & data(1) & " " & data(3) & " " & data(4) end if next text1.text = r
可是总是提示下界越标呀,csv数据量很大的话有影响么??
你调试下,你选择的列不对。 好的,十分感谢您的指导,我去试试
我做的是一个这样的东西:csv文件从intouch中保存生成,所以每次数据都会不一样,但是列总是28列,行数就不一定了,这28列中前两列为日期、时间,后面26列是参数列
在vb中,编了26个复选框对应csv中的26个参数,复选框选中哪个,对应将csv读出并在文本框中显示那些参数列。最后将这些数据存到excel中。
Open "DATAFILE.CSV" For Input As #1 ' 打开文件。发了几个贴子,全是这个问题的。
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。
If TextString = "" Then
TextString = TextLine
Else
TextString = TextString & ";" & TextLine
End If
Loop
Close #1 ' 关闭文件。
SplitStr = Split(TextString, ";")
m = UBound(SplitStr)
TextString = ""
For i = 0 To m - 1
SplitStr2 = Split(SplitStr(i), ",")
n = UBound(SplitStr2)
For j = 0 To n - 1
If Check1(j) Then
TextString = TextString.Text & SplitStr2(j) & " "
End If
Next j
TextString = TextString & vbCrLf
Next i
Text1 = TextString
我不太明白的是,楼主为什么要把文本一行行连接起来,再拆分。
当文件很长时,不断连接字符串系统就要重新分配变量缓存,这个过程会很慢。
如果我来做,会每输入一行,就赋给显示控件。字符串操作是最慢的,尽量避免不必要的字符串操作。
Open "DATAFILE.CSV" For Input As #1 ' 打开文件。我不太明白的是,楼主为什么要把文本一行行连接起来,再拆分。
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量。
TextLine = Replace(TextLine, ",", " ")
Text1 = Text1 & TextLine & vbCrlf
Loop
Close #1 ' 关闭文件。
当文件很长时,不断连接字符串系统就要重新分配变量缓存,这个过程会很慢。
如果我来做,会每输入一行,就赋给显示控件。字符串操作是最慢的,尽量避免不必要的字符串操作。
因为每行数据中会有固定的第几个是不需要的,这样就完全把所有数据全部写进去了 那也不需要把所有的行连接在一起呀。
每一行拆分不久行了?
看另一个帖子给你回的代码。
尽量避免长字符串的反复连接。 在循环中直接操作Text控件显示,也是很慢的。
应该是在循环中,每读取一行,就拆分内容,并把需要的内容提取出来,用String类型变量连接和保存。
这个操作完成后,一次性的赋值给Text控件。
十分谢谢各位的指导,我试一试,
补充:VB , 资源