【问题标题】:How to split FoxPro records?如何拆分 FoxPro 记录?
【发布时间】:2011-03-24 12:18:42
【问题描述】:

我在 FoxPro 的 dbf 文件中有 60,000 条记录。我想将它分成每 20,000 条记录(20000 * 3 = 60,000)。

我怎样才能做到这一点?

我是 FoxPro 的新手。我正在使用 Visual FoxPro 5.0。

提前致谢。

【问题讨论】:

    标签: visual-foxpro foxpro


    【解决方案1】:

    在使用COPY 命令时,您必须发出SKIP 命令以确保您从下一条记录开始。

    USE MyTable
    GO TOP
    COPY NEXT 20000 TO NewTable1
    SKIP 1
    COPY NEXT 20000 TO NewTable2
    SKIP 1
    COPY NEXT 20000 TO NewTable3
    

    【讨论】:

      【解决方案2】:

      如果您不关心记录的拆分方式,Todd 的建议将起作用。如果您想根据内容对其进行划分,您将需要执行 Stuart 的第一个建议,尽管他的确切答案只有在记录的 ID 按顺序从 1 到 60,000 运行时才有效。

      这里的最终目标是什么?为什么要分桌子?

      添马舰

      【讨论】:

        【解决方案3】:

        您可以直接从第一个表中选择:

        SELECT * from MyBigTable INTO TABLE SmallTable1 WHERE ID < 20000
        SELECT * from MyBigTable INTO TABLE SmallTable2 WHERE ID BETWEEN (20000, 39999)
        SELECT * from MyBigTable INTO TABLE SmallTable3 WHERE ID > 39999
        

        如果您想要更多控制,或者您需要操作数据,您可以使用 xbase 代码,如下所示:

        SELECT MyBigTable
        
        scan
            scatter name oRecord memo
        
            if oRecord.Id < 20000
                select SmallTable1
                append blank
                gather name oRecord memo
            else if oRecord.Id < 40000
                select SmallTable2
                append blank
                gather name oRecord memo
            else 
                select SmallTable3
                append blank
                gather name oRecord memo
        endscan 
        

        我使用 VFP 已经有一段时间了,这里没有它,所以对于任何语法错误表示歉意。

        【讨论】:

          【解决方案4】:
          use in 0 YourTable
          select YourTable
          go top
          copy to NewTable1 next 20000
          copy to NewTable2 next 20000
          copy to NewTable3 next 20000
          

          【讨论】:

          • 您需要在 COPY TO 命令之间发出 SKIP 1 命令以将记录指针向前移动 1 条记录。根据您的回答,NewTable1 的最后一条记录与 NewTable2 的第一条记录相同。
          【解决方案5】:

          如果您想根据记录数进行拆分,请尝试以下操作:

          SELECT * FROM table INTO TABLE tbl1 WHERE RECNO() <= 20000
          SELECT * FROM table INTO TABLE tbl2 WHERE BETWEEN(RECNO(), 20001, 40000)
          SELECT * FROM table INTO TABLE tbl3 WHERE RECNO() > 40000
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-10
            • 2015-05-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多