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个换行符的方法,可否有简单的方法或函数,在读入文本数据时,自动跳过空格、逗号、""、换行符、回车符之间,把所有的数据读入都数组中去。
   

解决方案 »

  1.   

    打开二进制文件,用一个变量获取文件内容,然后用Split函数分割一下.
      

  2.   

    首先想正确读取文本数据的内容,文本数据格式较乱,但共性有效数值都以数字如“20”表示,数字之间以空格、换行符(1或2个)、回车换行符等隔开,两个换行符之间本应该无数据的,现在读成有数据“0”了,读取完数据,再进行运算后再以二进制的方式进行存储。
    可不可以让两个换行符不被读出数字来,我用的是input #的函数,有其它更好的方法跳过分隔吗。
      

  3.   

    电脑没装vb6,没测试,把文本地址改一下,自已测试下      Private  WeiCodeArr, arr
       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
      

  4.   

    谢谢,我去试下。
    下午我试了下把文本所有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秒之内就运行完。求解决。
          
      

  5.   

    100万条记录 数据量太大,当然得运行一会儿了,要避免程序假死,可以在循环中加入DoEvents
    10秒内完成,数组是否正确?
    chr(10),chr(13 两个加起来才是一个换行吧,你替换成两个空格,所以可能是空格没处理好
      

  6.   

     正确的,原来编的小程序,txt表示的内容是一个二维矩形数据集,在上面中给的是一维,原理一样,大的数据量达到1000*1000左右,用二维数组,input #命令,用两个for语句读入,10秒读完。上面用了一个replace的语句把2个空格替换成一个空格,并用trim语句去掉首尾空格,但运行时间太久了。
      

  7.   

    把文本所有12220个数值合并成字符串,把字符串中的chr(13)、chr(10)替换为" ".再split。
    或者替换成别的单独关键字符,然后进行 分割 或用 instr 进行判断关键字符然后读取也可以。
      

  8.   

    字符串处理是很慢的,包括字符替换,特别是超长字符串。你读入数据后拼接超长字符串本身,就降低了效率。实际上,换行符是最终不需要的信息,因此没有必要替换它。<vb code>
    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>
      

  9.   

     1 2 3 4 5 6 7 8 9 10 换行符
     换行符
     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)的方式返回上一进程
    重新读入改行,把数据赋给数组,直到文件尾。
    但是代码如何操作呢。