txt 数据如下:
12220
1 2 3 4 5 6 7 8 9 10 换行符
11 12 13 14 15 16 17 18 19 20 换行符
换行符
21 22 23 24 25 26 27 28 29 30 换行符
换行符
.......................
如上不规则数据,12220代表数字的总数。打开文件
dim k as long
k=0
dim x as double
dim shuzu(1 to 12220)as doule
do while not eof(1)
k=k+1
input #1,x
shuzu(k)=x
loop程序运行时数组的下标超限,主要是因为两个换行符之间input #1 命令读入数据0,如定义为字符型,则读成""
不用读取所有数据再替换2个换行符的方法,可否有简单的方法或函数,在读入文本数据时,自动跳过空格、逗号、""、换行符、回车符之间,把所有的数据读入都数组中去。
12220
1 2 3 4 5 6 7 8 9 10 换行符
11 12 13 14 15 16 17 18 19 20 换行符
换行符
21 22 23 24 25 26 27 28 29 30 换行符
换行符
.......................
如上不规则数据,12220代表数字的总数。打开文件
dim k as long
k=0
dim x as double
dim shuzu(1 to 12220)as doule
do while not eof(1)
k=k+1
input #1,x
shuzu(k)=x
loop程序运行时数组的下标超限,主要是因为两个换行符之间input #1 命令读入数据0,如定义为字符型,则读成""
不用读取所有数据再替换2个换行符的方法,可否有简单的方法或函数,在读入文本数据时,自动跳过空格、逗号、""、换行符、回车符之间,把所有的数据读入都数组中去。
可不可以让两个换行符不被读出数字来,我用的是input #的函数,有其它更好的方法跳过分隔吗。
Private WeiCode, BB() As Byte
Private k as long
dim shuzu(1 to 12220)as doule Private Sub kkk()
Dim i, p As Integer
k = 1
ReDim BB(FileLen(App.Path & "\data\gc.txt") - 1)
Open App.Path & "\data\gc.txt" For Binary As #1
Get #1, , BB
Close #1
WeiCode = StrConv(BB, vbUnicode)
If WeiCode <> "" Then
WeiCodeArr = Split(WeiCode, vbNewLine)
For i = 0 To UBound(WeiCodeArr)
If InStr(WeiCodeArr(i), " ") Then
arr = Split(WeiCodeArr(i), " ")
For p = 0 To UBound(arr)
shuzu(k) = CBbl(arr(p))
k = k + 1
Next
End If
Next
End If
End Sub
下午我试了下把文本所有12220个数值合并成字符串,把字符串中的chr(13)、chr(10)替换为" ".再split。
dim temp,x as string
do while not eof(1)
input #1,x
temp = temp & " " & x
loop
temp=repacle(temp,chr(10)," ")
temp=repacle(temp,chr(13)," ")
temp=trim(repacle(temp," "," "))
shuju=split(temp," ")
这样可写入数组中去,但出现有些文本有10m左右大,有100万条记录,运行10分钟都没反应,小的文件几十k运行是正确。10m这样的文本打开我把出现双换行符的地方去掉一个换行符,直接用input #1,数组(i)的方法,10秒之内就运行完。求解决。
10秒内完成,数组是否正确?
chr(10),chr(13 两个加起来才是一个换行吧,你替换成两个空格,所以可能是空格没处理好
或者替换成别的单独关键字符,然后进行 分割 或用 instr 进行判断关键字符然后读取也可以。
Dim temp() As String, x As String
Dim i As Integer
Do Until EOF(1)
Line Input #1, x
If x > "" Then
tmp = Split(x, Space(1))
For i = 0 To Ubound(tmp)
shuju(k) = tmp(i)
k = k + 1
Next i
End If
Loop
</vb code>
换行符
11 12 13 14 15 16 17 18 19 20dim shuzu (1 to 12220) as double
dim x as string 引入字符变量,判断是否为""
如上数据,可不可以先 判断该行是否为""
如果是,则继续用用INPUT #1,x,直达x<> ""
如果不是则再调用 INPUT #1,SHUZU(k)的方式返回上一进程
重新读入改行,把数据赋给数组,直到文件尾。
但是代码如何操作呢。