欲达到的效果:
目录下有300个近20兆的文本数据,想将分成4个一组,存入数组中运算,现在的代码速度不行,敬请斧正~附供改正源码(1组4个文本的单循环)如下:假设程序目录下有待存入数组的文本4个,名称分别为: 1.txt 2.txt 3.txt 4.txt
Option ExplicitSub bj()
Dim I As Double, j As Double, k As Double, l As Double, n As Double, p As Double
Dim tp As Double, kp As Double, mp As Double
Dim index As Double
Dim fourjh() As Double '1次提取4个文本的并集数组
Dim js() As Long Dim filetxt As String, x As Variant
ReDim js(1 To 4)For mp = 1 To 4
'求得文本文件行数 filetxt = String(FileLen(App.Path & "\" & mp & ".txt"), " ")
Open App.Path & "\" & mp & ".txt" For Binary As #1
Get #1, , filetxt
Close 1
x = Split(filetxt, vbCrLf)
If mp = 1 Then
js(mp) = UBound(x)
Else
js(mp) = js(mp - 1) + UBound(x)
End If
If mp = 1 Then
ReDim fourjh(1 To UBound(x))
For I = 1 To UBound(x)
fourjh(I) = Val(x(I - 1))
Next I
Else
ReDim Preserve fourjh(1 To js(mp - 1) + UBound(x))
For I = 1 To UBound(x)
fourjh(js(mp - 1) + I) = Val(x(I - 1))
Next I End If
Next mp
End Sub您费心...俺在线恭候
目录下有300个近20兆的文本数据,想将分成4个一组,存入数组中运算,现在的代码速度不行,敬请斧正~附供改正源码(1组4个文本的单循环)如下:假设程序目录下有待存入数组的文本4个,名称分别为: 1.txt 2.txt 3.txt 4.txt
Option ExplicitSub bj()
Dim I As Double, j As Double, k As Double, l As Double, n As Double, p As Double
Dim tp As Double, kp As Double, mp As Double
Dim index As Double
Dim fourjh() As Double '1次提取4个文本的并集数组
Dim js() As Long Dim filetxt As String, x As Variant
ReDim js(1 To 4)For mp = 1 To 4
'求得文本文件行数 filetxt = String(FileLen(App.Path & "\" & mp & ".txt"), " ")
Open App.Path & "\" & mp & ".txt" For Binary As #1
Get #1, , filetxt
Close 1
x = Split(filetxt, vbCrLf)
If mp = 1 Then
js(mp) = UBound(x)
Else
js(mp) = js(mp - 1) + UBound(x)
End If
If mp = 1 Then
ReDim fourjh(1 To UBound(x))
For I = 1 To UBound(x)
fourjh(I) = Val(x(I - 1))
Next I
Else
ReDim Preserve fourjh(1 To js(mp - 1) + UBound(x))
For I = 1 To UBound(x)
fourjh(js(mp - 1) + I) = Val(x(I - 1))
Next I End If
Next mp
End Sub您费心...俺在线恭候
解决方案 »
- 无边框自绘界面,拖拉窗体大小!
- vb新建excel文件后保存运行第二次时出错?
- 如何用程序实现:判断一台计算机是否正在上网?
- 高分求助简单VB问题。
- vb中关于打印的问题
- 调查--你来csdn的乐趣是什么?
- 怎样在VB中实现快速查找本机的文件和目录!?
- ADO代码连接SQL7.0数据库?
- 如何使用mslu,即让程序在win98中支持unicode程序。
- 有谁知道使用shell打开一个程序,并使他按正常窗口显示(要打开程序为无标题的窗口)
- 高手们,使用WINSOCK进行服务端和客户端的连接。为何在学校里两台电脑可以联机,换做学校里和学校外连接就失败?
- vb inet控件post时出现错误问题,请高手指点,小弟感激不尽
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Double, Source As Double, ByVal Length As Long)
Sub bj6() Dim I As Double, j As Double, k As Double, l As Double, n As Double, p As Double
Dim tp As Double, kp As Double, mp As Double
Dim ntw() As Double
Dim index As Double
Dim fourjh() As Double '1次提取4个文本的并集
Dim js() As LongDim filetxt As String, x As Variant
ReDim js(1 To 4)For mp = 1 To 4
'求得文本文件行数 filetxt = String(FileLen(App.Path & "\" & mp & ".txt"), " ")
Open App.Path & "\" & mp & ".txt" For Binary As #1
Get #1, , filetxt
Close 1
x = Split(filetxt, vbCrLf)
ReDim ntw(1 To UBound(x))
For I = 1 To UBound(x)
ntw(I) = Val(x(I - 1))
Next I
If mp = 1 Then
js(mp) = UBound(x)
Else
js(mp) = js(mp - 1) + UBound(x)
End If
If mp = 1 Then
ReDim fourjh(1 To UBound(x))
CopyMemory fourjh(1), ntw(1), UBound(x) Else
ReDim Preserve fourjh(1 To js(mp - 1) + UBound(x))
CopyMemory fourjh(js(mp - 1) + 1), ntw(1), UBound(x)
End If
Next mp
End Sub
2.可以使用进度条,可以增强交互.
3.数组redim也不用了,减少了copy内存的操作.
4.甚至一些控件会专门提供读取文本文件的方法,也可能免去了你的逐行读取的问题.
http://blog.csdn.net/KiteGirl/archive/2008/12/19/3554669.aspx这个东西的功能是:
1、给文本文件建立索引信息,获取文本文件中所有行分隔符的地址。
2、根据这些索引信息可以直接取任意位置、任意行(从文件指定地址取指定数量字节)。
3、这个东西建立索引数据的时候,对文本文件操作是一小片、一小片地进行,而不是一次读入内存。
4、如果你的文本文件不被修改,只需要建立一次索引。建立索引的速度非常快,甚至每次重新建立的速度你都可以接受。
谢谢楼上诸位,虽然问题没解决,但至少知道了大量的文本读写有速度慢的缺陷...TO KITEGIRL(小仙妹):
博客的文章拜读了,给文本加索,使之可以象数据库一样进行操作是一件很有价值的事!可惜目前用不上,只有先珍藏了...