同上! 谢谢诸位!分少,见谅啊!

解决方案 »

  1.   


    Public Sub Index(senten As String)    Dim i, j, k, L1, L2 As Single
        
        Dim a As AStruct             '定义表结构的数据类型
        Dim d As BStruct             '定义数据的存储类型
        
        Dim c(1 To 20000) As CStruct '临时存储稠密索引表
        Dim b As CStruct              '临时变量
        
        Dim keyfile As String         '记录主键的文件名
        Dim table As String           '记录当前表的名字
        
        '提取表的名字
        
        
        k = 14                             '提取表名
        i = k
        ch = Mid(senten, i, 1)
        Do While ch <> ";"
        i = i + 1
        ch = Mid(senten, i, 1)
        Loop
        
        table = Mid(senten, k, i - k)      '提取表名
        
        L1 = FileLen(App.Path + "\db\" & database & "\" & table) \ Len(a)                  '获取主键的文件名     
         
        For j = 1 To L1
        
            Open App.Path + "\db\" & database & "\" & table For Random As #1 Len = Len(a)   '获得一个属性        Get #1, j, a                                                                    '获得一个属性
            Close #1
            
            If Trim(a.IsKey) = "true" Then
            keyfile = Trim(a.StoreName)
            Exit For
            End If
            
        Next j                                                                              '获取主键的文件名
        
         '建立新的主键表     L1 = FileLen(App.Path + "\db\" & database & "\" & "stuid") \ Len(d)     '计算整个文件的大小
         L2 = 5000
         
         Open App.Path + "\db\" & database & "\" & "stuid" For Random As #1 Len = Len(d)
         
        
        For i = 0 To 2                                               '将整个文件分块,分别对各个块进行排序;
        
           For j = 1 To L2                                           '取出数据
        
                If i * 5000 + j = L1 Then                            '考虑特殊情况,最后一个块不是完整的块,记录位置
                   L2 = j
                   Exit For
                End If
        
                Get #1, i * L2 + j, d
                c(j).Key = d.Context
                c(j).Id = i * L2 + j
        
           Next j
        
           Call HEAPSORT(c, L2)                                      '调用对排序算法,进行排序
        
           Open App.Path & "\db\ " & database & "\" & Str(i) For Random As #2 Len = Len(b)    '新建文件,将已排序数据写入文件
           For j = 1 To L2
           Put #2, j, c(j)
           Next j
           Close #2
        
        Next i                                                       '完成一次分块,排序
        
        Close #1                                                     '分块结束
        
        '进行三路归并
        Open App.Path & "\db\ " & database & "\" & Str(0) For Random As #1 Len = Len(b)     '新建文件,将已排序数据写入文件
        Open App.Path & "\db\ " & database & "\" & Str(1) For Random As #2 Len = Len(b)     '新建文件,将已排序数据写入文件
        Open App.Path & "\db\ " & database & "\" & Str(2) For Random As #3 Len = Len(b)     '新建文件,将已排序数据写入文件
        Open App.Path & "\db\ " & database & "\stuidID" For Random As #4 Len = Len(b)        '新建文件,将已排序数据写入文件
        
        Get #1, , c(1)
        Get #2, , c(2)
        Get #3, , c(3)
        
        Do While Not EOF(1) Or Not EOF(2) Or Not EOF(3)
        
           i = TMin(Val(c(1).Key), Val(c(2).Key), Val(c(3).Key))
        
           Select Case i
           
                Case 1
        
                   Put #4, , c(1)
        
                   If Not EOF(1) Then
                   Get #1, , c(1)
                   Else
                   c(1).Key = Str(100000000)
                   End If
                Case 2
                   Put #4, , c(2)
        
                   If Not EOF(2) Then
                   Get #2, , c(2)
                   Else
                   c(2).Key = Str(100000000)
                   End If
                Case 3
                   Put #4, , c(3)
        
                   If Not EOF(3) Then
                   Get #3, , c(3)
                   Else
                   c(3).Key = Str(100000000)
                   End If
                Case Else
                   MsgBox ("建立索引出错!")
        
           End Select
           
        Loop
        
        Close #1
        Close #2
        Close #3
        Close #4                                                      '进行三路归并
        
        
        '建立稀疏索引文件;
        L1 = FileLen(App.Path & "\db\ " & database & "\stuidID ") \ Len(b)     '计算稠密索引文件的大小
        Open App.Path & "\db\ " & database & "\stuidID" For Random As #1 Len = Len(b)        '打开稠密索引文件
        Open App.Path & "\db\ " & database & "\stuidSID" For Random As #2 Len = Len(b)      '新建稀疏索引文件
        
        For i = 1 To L1 \ 100
        
        Get #1, (i - 1) * 100 + 1, b
        Put #2, i, b
        
        Next i
        
        Close #1
        Close #2
        
        
        
        
    End Sub
      

  2.   

    用dir函数,确认文件或路径是否存在,存在在执行相关操作。
    dir的详细说明看看msdn
      

  3.   


         Open App.Path & "\db\ " & database & "\" & Str(i) For Random As #2 Len = Len(b)    
    的Str(i),改为cStr(i),因为有空格