Как разделить записи FoxPro?

У меня есть 60 000 записей в файле dbf в FoxPro. Я хочу разбить его на каждые 20 000 записей (20 000 * 3 = 60 000).

Как я могу этого добиться?

Я новичок в FoxPro. Я использую Visual FoxPro 5.0.

Заранее спасибо.


person svk    schedule 24.03.2011    source источник


Ответы (5)


Вы должны ввести команду SKIP при использовании команды COPY, чтобы убедиться, что вы начинаете со следующей записи.

USE MyTable
GO TOP
COPY NEXT 20000 TO NewTable1
SKIP 1
COPY NEXT 20000 TO NewTable2
SKIP 1
COPY NEXT 20000 TO NewTable3
person DaveB    schedule 25.03.2011

Предложение Тодда сработает, если вам все равно, как разделены записи. Если вы хотите разделить их на основе их содержимого, вам нужно сделать что-то вроде первого предложения Стюарта, хотя его точный ответ будет работать только в том случае, если идентификаторы для записей идут от 1 до 60 000 по порядку.

Какова конечная цель здесь? Зачем делить стол?

Тамар

person Tamar E. Granor    schedule 24.03.2011

Вы можете напрямую выбрать из первой таблицы:

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, и у меня его здесь нет, поэтому приносим извинения за любые синтаксические ошибки.

person stuartd    schedule 24.03.2011

Если вы хотите разделить на основе номеров записей, попробуйте следующее:

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
person Ganapathy    schedule 04.08.2012

person    schedule
comment
Вам нужно выполнить команду SKIP 1 между командами COPY TO, чтобы переместить указатель записи вперед на 1 запись. В вашем ответе последняя запись NewTable1 будет такой же, как и первая запись NewTable2. - person DaveB; 25.03.2011