基础问题难倒我 Type rec
x as long
y as long
End rec
Dim sRec as rec
/-------------------
Open "dName" for Binary as #1
For i=1 To dEnd
Get #1,,sRec'
...
next
运行完全没问题.但换成
For i=1 To dEnd
Get #1,i,sRec
Next
除了第一条记录读去正确 其他的记录全都乱七八糟Get #1,,sRec与Get #1,i,sRec 有什么区别吗??

解决方案 »

  1.   

    Get 语句
    将一个已打开的磁盘文件读入一个变量之中。
    语法
    Get [#]filenumber, [recnumber], varname 
    Get 语句的语法具有以下几个部分:
    部分 描述 
    filenumber 必要。任何有效的文件号。 
    recnumber 可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表示在此处开始读出数据。 
    varname 必要。一个有效的变量名,将读出的数据放入其中。 
    说明
    通常用 Put 将 Get 读出的数据写入一个文件。
    文件中第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。若省略 recnumber,则会读出紧随上一个 Get 或 Put 语句之后的下一个记录或字节(或读出最后一个 Seek 函数指出的记录或字节)。所有用于分界的逗号都必须罗列出来,例如:
    Get #4,,FileBuffer


    For i=1 To dEnd 
    Get #1,i,sRec ' 但此句中的i执行的是自文件第i字节起(8字节,2个Long字节长),所以获得的是错误数据.
    Next 
      

  2.   

    似乎代码改为
    For i=1 To dEnd STEP 8 
    Get #1,i,sRec 
    Next
    可获得正确数据. 
      

  3.   

    谢谢各位解答
    '----------------------------------------
    Get 语句示例
    本示例使用 Get 语句来将数据从文件读到变量中。示例中假设 TESTFILE 文件中含有五个用户自定义类型的记录。Type Record   ' 定义用户自定义的数据类型。
       ID As Integer
       Name As String * 20
    End TypeDim MyRecord As Record, Position   ' 声明变量。
    ' 为随机访问打开样本文件。
    Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
    ' 使用 Get 语句来读样本文件。
    Position = 3   ' 定义记录号。
    Get #1, Position, MyRecord   ' 读第三个记录。
    Close #1   ' 关闭文件。'---------------------------
    以上是MSDN中的解释
    就是这段把我害了!那么请问假如我要读一个很大的文件 想分成几页来显示
    我该如何做呢?既在读第2,4,5...页时我怎么定义起始记录位置呢?
      

  4.   

    重新说一下我的要求吧
    记录长度=40
    spageSize=30
    我怎么能分次读取 1 2 3..页?
    我的代码:
    'sPage当前要显示的页Open fName For Binary As #1
    Seek(1), (sPage - 1) * sPageSize + 1
    For i = (sPage - 1) * sPageSize + 1 To (sPage - 1) * sPageSize + sPageSize
    Get #1,, fRec
    grdMain.additem  fRec.x1 &vbtab &fRec.x2.....
    nextsPage=1时正确
    sPage=2,3,4..时 错误
      

  5.   

    已解决
    用For random as # len=40