/* SORT TO via PP rule. */ PROCEDURE Main() LOCAL aStruct FErase( "src.dbf" ) FErase( "dst1.dbf" ) FErase( "dst2.dbf" ) FErase( "dst3.dbf" ) aStruct := { ; { "ID", "N", 4, 0 }, ; { "NAME", "C", 20, 0 }, ; { "AGE", "N", 3, 0 } } dbCreate( "src.dbf", aStruct ) USE src.dbf NEW EXCLUSIVE ALIAS s dbAppend() ; FieldPut(1,1) ; FieldPut(2,"Carol") ; FieldPut(3,30) dbAppend() ; FieldPut(1,2) ; FieldPut(2,"Alice") ; FieldPut(3,18) dbAppend() ; FieldPut(1,3) ; FieldPut(2,"Eve") ; FieldPut(3,60) dbAppend() ; FieldPut(1,4) ; FieldPut(2,"Bob") ; FieldPut(3,25) dbAppend() ; FieldPut(1,5) ; FieldPut(2,"Dan") ; FieldPut(3,45) dbCommit() /* 1. SORT ON name asc */ dbGoTop() SORT TO dst1.dbf ON name dbCloseArea() USE dst1.dbf NEW EXCLUSIVE dbGoTop() ? "1. name asc:" DO WHILE !Eof() ? " ", FieldGet(1), AllTrim(FieldGet(2)), FieldGet(3) dbSkip() ENDDO ? " (expect: Alice, Bob, Carol, Dan, Eve)" dbCloseArea() /* 2. SORT ON age/D */ USE src.dbf NEW EXCLUSIVE ALIAS s dbGoTop() SORT TO dst2.dbf ON age/D dbCloseArea() USE dst2.dbf NEW EXCLUSIVE dbGoTop() ? "2. age desc:" DO WHILE !Eof() ? " ", FieldGet(1), AllTrim(FieldGet(2)), FieldGet(3) dbSkip() ENDDO ? " (expect: 60, 45, 30, 25, 18)" dbCloseArea() /* 3. SORT ON age FOR age >= 30 */ USE src.dbf NEW EXCLUSIVE ALIAS s dbGoTop() SORT TO dst3.dbf ON age FOR s->age >= 30 dbCloseArea() USE dst3.dbf NEW EXCLUSIVE dbGoTop() ? "3. age asc, FOR age>=30:" DO WHILE !Eof() ? " ", FieldGet(1), AllTrim(FieldGet(2)), FieldGet(3) dbSkip() ENDDO ? " (expect: Carol/30, Dan/45, Eve/60)" dbCloseArea() FErase( "src.dbf" ) FErase( "dst1.dbf" ) FErase( "dst2.dbf" ) FErase( "dst3.dbf" ) ? "DONE" RETURN