现在有一个系统,差不多一秒中产生32个整形数据的记录,我打算先把这些数据存到内存中,然后每隔2分钟往硬盘的文件中写一次(总共32*120个数据),一天一个数据文件,所以我定义了一个二维数组myData(31,119)来临时存储采集的数据,请大家帮我分析分析是什么文件存储比较好,要是用随机的方式打开文件,我又不知道怎么一次性把整个二维数据存储到文件中(我只知道自定义的数据结构可以),大家都有什么好的办法

解决方案 »

  1.   

    什么文件??当然是二进制文件最好了,如果用xml你的数据量太大,可能以后读取回很慢。
      

  2.   

    我现在是这样作的,不过总感觉这样存储是不是效率有点低,不知道有什么高效的方法
            Open "d:\record\" & Format(Now, "yymmdd") & ".dat" For Append As #1
            For i = 0 To 119
                Write #1, sample_value_time(1, i), sample_value_data(0, i), sample_value_data(0, i), sample_value_data(1, i), sample_value_data(2, i), sample_value_data(3, i), sample_value_data(4, i), sample_value_data(5, i), sample_value_data(6, i), sample_value_data(7, i), sample_value_data(8, i), sample_value_data(9, i), sample_value_data(10, i), sample_value_data(11, i), sample_value_data(12, i), sample_value_data(13, i), sample_value_data(14, i), sample_value_data(15, i), sample_value_data(16, i), sample_value_data(17, i), sample_value_data(18, i), sample_value_data(19, i), sample_value_data(20, i), sample_value_data(21, i), sample_value_data(22, i), sample_value_data(23, i), sample_value_data(24, i), sample_value_data(25, i), sample_value_data(26, i), sample_value_data(27, i), sample_value_data(28, i), sample_value_data(29, i), sample_value_data(30, i), sample_value_data(31, i)
            Next i
            Close #1
      

  3.   

    下面的程序你可以单步跟踪来检测data数组中的值。可以达到你的要求。
    Option ExplicitDim data() As Long
    Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    '设置数据
    ReDim data(1 To 3, 1 To 4)
        For i = 1 To 3
            For j = 1 To 4
                data(i, j) = i * j
            Next j
        Next i
    '写入文件
    Open "c:\111.txt" For Binary As #1
    Put #1, , data
    Close #1
    '擦除数据
    Erase data
    '重新定义数组大小
    ReDim data(1 To 3, 1 To 4)
    '读入刚才写入的文件
    Open "c:\111.txt" For Binary As #1
    Get #1, , data
    Close #1    
    End Sub
      

  4.   

    yunyu97()的方法很好,希望大家继续发表意见
      

  5.   

    to pepergis(加紧) 
    搂住并不需要在文本中打开这个文件来进行查看,所以不需要加入分割。我的方法所保存的文件在记事本中你看到的是乱码,如果需要查看的话,就必须在保存之前将数据变成文本然后保存。读入的时候再将文本变为数据,这样影响效率。
      

  6.   

    如果你需要存储时间,可以用如下的方法。
    由于在内存中date型占用8个字节,你可以使用四个integer型的长度来存储时间。
    你可以定义一个这样的数组,myData(1 to 36,1 to 120) as integer,前1到32个元素存放每一组的数据。注意这种定义的方式每一组数据在内存中的顺序是连在一起的。33到36这四个元素存放时间。然后是用copymemory函数。
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)再定义一个date型的数据myDate = Now
    然后使用copymemory myData(33,i),myDate,8
    就可以把时间拷贝到数组中了。
    当你需要读取时间的时候,你使用copymemory myDate,myData(33,i),8
    就可以读出你所需要的时间。
      

  7.   

    如果你每组数据是固定的,你可以首先读出文件的字节数目,然后除以每组数据的总字节长度就可以得出总的数据量。
    得到已经打开的文件长度使用Lof函数,得到没有打开的文件长度使用FileLen函数
      

  8.   

    多谢yunyu97,真是让我大开眼界,回头结贴的时候给分