Новости



Visual FoxPro 9 позволяет создавать ещё более производительные приложения баз данных.
Двадцатиление FoxPro! Microsoft принимает поздравления.
Visual FoxPro Toolkit for .NET - более 225 функций VFP 7.0, для языков .NET (подробнее)

Команда SORT

См. также

Сортирует записи в выбранной в данный момент таблице и выводит отсортированные записи в новую таблицу.

Синтаксис

SORT TO TableName ON FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...]
[ASCENDING | DESCENDING]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FIELDS FieldNameList
| FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton]
[NOOPTIMIZE]

Параметры

TableName

Задает имя новой таблицы, предназначенной для отсортированных записей. Visual FoxPro предполагает, что файлы таблиц имеют расширение имени .DBF. Расширение .DBF присваивается автоматически, если вы задали имя файла без расширения.

ON FieldName1

Задает поле в выбранной в данный момент таблице, на базе которого будет п оизводиться сортировка. Содержимое и тип этого поля будут определять порядок записей в новой таблице. По умолчанию сортировка производится в возрастающем порядке. Нельзя проводить сортировку по полям типа Memo или General.

Можно задать имена еще нескольких полей (FieldName2, FieldName3), чтобы дополнительно упорядочить новую таблицу. Первое поле FieldName1 является полем первичной сортировки, второе поле FieldName2 fox90001.gif полем вторичной сортировки и т.д.

Ниже приведен пример, в котором таблица сортируется по трем полям. Сначала таб ица customer открывается, затем она сортируется, создавая новую таблицу temp. Записи в таблице temp упорядочены по полю cust_id.

CLOSE DATABASES

OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE customer && Opens Customer table

CLEAR

LIST FIELDS company, cust_id NEXT 3

SORT TO temp ON cust_id

USE temp

LIST FIELDS company, cust_id NEXT 3

WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT

[/A | /D] [/C]

Для каждого поля, участвующего в сортировке, можно указать возрастающий или уб вающий порядок сортировки. /A задает возрастающий порядок для данного поля, /D fox90001.gif убывающий порядок. Опцию /A или /D можно задать для поля любого типа.

По умолчанию порядок сортировки по символьному полю определяется с учетом егистра символов. Если после имени символьного поля задать опцию /C, регистр будет игнорироваться. Опцию /C можно указывать в сочетании с опцией /A или /D: нап имер /AC или /DC.

В следующем примере создается новая таблица clients. Таблица orders сортируется по полю order_date в возрастающем порядке и по полю freight в убывающем порядке.

USE orders

SORT TO clients ON order_date/A,freight/D

ASCENDING

Задает возрастающий порядок для всех полей, для которых не указана опция /D.

DESCENDING

Задает убывающий порядок для всех полей, для которых не указана опция /A.

Если опустить ASCENDING и DESCENDING, порядок сортировки по умолчанию будет возрастающим.

Scope

Задает диапазон сортируемых записей. Диапазон задается следующими предложе иями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. Подробнее о предложениях диапазона см. тему Предложения диапазона или главу 2 "Обзор языка программирования" Руководства разработчика.

По умолчанию областью действия команды SORT являются все записи (предложение ALL).

FOR lExpression1

Задает сортировку только тех записей текущей таблицы, для которых логическое условие lExpression1 имеет значение "истина" (.T.). Предложение FOR позволяет выполнять условную сортировку, отсеивая ненужные записи.

Технология Рашмора оптимизирует команду SORT ... FOR, если lExpression1 является оптимизируемым выражением. В целях получения наивысшей производитель ости пользуйтесь в предложении FOR оптимизируемым выражением. О выражениях, опускающих оптимизацию по технологии Рашмора, см. главу 17 "Оптимизация приложе ий" Руководства разработчика.

WHILE lExpression2

Задает условие, в соответствии с которым записи из текущей таблицы включаются в процесс сортировки, пока логическое выражение lExpression2 остается истинным (.T.).

FIELDS FieldNameList

Задает поля исходной таблицы, которые следует включить в новую таблицу, соз аваемую командой SORT. Если опустить предложение FIELDS, в новую таблицу вк ючаются все поля исходной таблицы.

FIELDS LIKE Skeleton

Указывает, что в новую таблицу, создаваемую командой SORT, следует включить те поля исходной таблицы, которые соответствуют шаблону имен Skeleton.

FIELDS EXCEPT Skeleton

Указывает, что в новую таблицу, создаваемую командой SORT, следует включить все поля исходной таблицы, кроме тех, которые соответствуют шаблону имен Skeleton.

В шаблоне имен полей Skeleton можно использовать символы подстановки. Например, чтобы задать включение в овую таблицу всех полей, имена которых начинаются на буквы A и P, воспользуйтесь следующей командой:

SORT TO mytable ON myfield FIELDS LIKE A*,P*

Предложение LIKE может действовать в сочетании с предложением EXCEPT:

SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*

NOOPTIMIZE

Блокирует оптимизацию операции SORT по технологии Рашмора. Подробнее см. темы SET OPTIMIZE и Основы технологии Rushmore или главу 17 "Оптимизация приложений" Руководства разработчика.

Комментарии

Порядок записей, вставляемых в новую таблицу, определяется одним или неско ькими заданными полями текущей таблицы.

Важное замечание Убедитесь, что у вас достаточно места на диске, чтобы разместить новую таб ицу и временные рабочие файлы, создаваемые в процессе сортировки. Для выполнения сортировки может потребоваться пространство на диске, втрое превышающее размер исходной таблицы. Объем свободного места на диске можно определить с помощью функций DISKSPACE( ) и SYS(2020). Если вам не хватило места на диске в процессе сортировки, Visual FoxPro отобразит предупреждение об ошибке и временные ра очие файлы будут удалены.

Поля символьного типа, содержащие цифры и пробелы, могут оказаться отсортирова ными не в том порядке, на какой вы рассчитываете. Числовые поля заполняются сп ава налево, и пустые позиции остаются слева. Символьные поля, напротив, запол яются слева направо, и пустые позиции остаются справа.

Например, если две записи в таблице включают символьное поле, которое в одной записи содержит число 1724, а в другой 18, и таблица сортируется по этому полю в возрастающем порядке, то запись с числом 1724 окажется перед записью с числом 18. Это объясняется тем, что Visual FoxPro считывает символы в поле символь ого типа слева направо, и поскольку 17 (от числа 1724) меньше, чем 18, первым бу ет поставлено число 1724. Чтобы избежать подобных проблем, ставьте перед ме ьшими числами начальные нули (0018) или делайте такие поля числовыми.



Новое на сайте

  • Обновлен портфель программиста

    Добавлены: Установка HTML Help (Создание справочной системы), Imagedit.zip - Графический редактор ( ico и bmp), Библиотека локализации HTML Help (Русский)
  • Новые примеры программ

    Установка библиотек, Игровая программа "Охота на лис", Установка библиотек "Охота на лис", plastic -"Платежки", Библиотеки (на FPD26), platan -"Платежки" (на Clipper 5.2)
  • Обновленна справка

    Подсказки, технология программирования и использование Visual FoxPro. Команды, функции, операторы, объекты, свойства, события и методы.