    
         
 
 
 
 
 
 
        Министерство приборостроения, средств автоматизации
 
                        и систем управления
 

 
           
 
               
 
                 Операционная система МОС ВП
 
                Подсистема разработки программ
 
                 ПРОГРАММА СОРТИРОВКИ/СЛИЯНИЯ
      
                   Руководство программиста
 
                     ЛИСТ УТВЕРЖДЕНИЯ
 
                   2б.00152-01 33 06-ЛУ
 
                          Листов 2
 
  
  
  
  
                    Руководитель темы
 
                           Зам. директора ИНЭУМ
 
                           -----------------Хрущев С.Н.
 
                           "---"------------1987 г.
 
                    Представители предприятия-разработчика:
 
                           Зав. отделом СКБ ВМ 
 
                           -----------------Паулаускас Э.С.
 
                           "---"------------1987 г.
 
                           Зав.сектором СКБ ВМ
 
                           -----------------Дугнене Н.И.  
 
                           "---"------------1987 г.
 
  
  
                         1987
 
        Перв. примен.                             Литер
        2б.00152-01
 
  
  
 

 
                              -2- 
  
                        2б.00152-01 33 06-ЛУ
  
  
 
 
 
 
 
                    Представители ИНЭУМ:
 
                            Ответственный исполнитель темы
 
                            Зав. отделением
 
                            -----------------Остапенко Г.П.
 
                            "---"------------1987 г.
 
                            Нормоконтролер
 
                            -----------------Чинчене И.Ю.
 
                            "---"------------1987 г.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
  
  
  
 
   Утвержден
 
   2б.00152-01 33 06-ЛУ
 
 
 
 
 
 
 
 
 
 
                  Операционная система МОС ВП
 
                 Подсистема разработки программ
 

                  ПРОГРАММА СОРТИРОВКИ/СЛИЯНИЯ

       
                    Руководство программиста
 
                       2б.00152-01 33 06
      
                          Листов 87/4K
  
 
 
 
  
    
   
   
 
 
  
  
  
 1К  
 5K
 83К  
 84K
  
  
  
  
                              1987 
 
     Перв. примен.                              Литера
     2б.00152-01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                  Операционная система МОС ВП
 
                 Подсистема разработки программ
 
                  ПРОГРАММА СОРТИРОВКИ/СЛИЯНИЯ
 
                    Руководство программиста
 
                         00152-01 33 06
 
                            Листов 83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
  
    
   
  

 
                              1987

 
 
                             - 2 -
 
                         00152-01 33 06
 
 
                            АННОТАЦИЯ
 
 
        В данном документе описывается обслуживающая программа
 
   сортировки/слияния в операционной системе МОС ВП для вычис-
 
   лительного комплекса СМ1700.  Программа  предназначена  для
 
   сортировки или слияния файлов данных и может быть выполнена
 
   в интерактивном режиме или как пакетное задание.
 
 
        Входная информация,  необходимая  для  сортировки  или
 
   слияния, должна быть указана при обращении к  программе.  С
 
   помощью этой информации пользователь может определить пара-
 
   метры входных и выходных данных, а также выбрать определен-
 
   ленный режим выполнения программы.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
                             - 3 -
 
                         00152-01 33 06
 
 
 
 
 
 
                           СОДЕРЖАНИЕ
 
 
 
 
 
   1.  НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ             6
 
 
   2.  ХАРАКТЕРИСТИКИ ПРОГРАММЫ                              8
 
 
   2.1.    Программа сортировки SORT                         8
 
   2.1.1.    Несколько ключей                               11
 
   2.1.2.    Одинаковые ключи                               11
 
   2.1.3.    Организация выходного файла                    11
 
   2.1.4.    Процесс сортировки                             12
 
   2.2.    Программа слияния MERGE                          13
 
   2.3.    Последовательность упорядочения                  14
 
   2.4.    Файл спецификаций сортировки и слияния           14
 
   2.5.    Запуск сортировки с терминала                    16
 
   2.6.    Пакетное задание сортировки и слияния            17
 
   2.7.    Оптимизация                                      17
 
   2.7.1.    Возможности                                    17
 
   2.7.2.    Размещение рабочих файлов                      18
 
   2.7.3.    Экстент рабочего набора                        19
 
   2.7.4.    Квалификаторы оптимизации сортировки           20
 
   2.7.5.    Возможности администратора                     21
 
 
   3.  ОБРАЩЕНИЕ К ПРОГРАММЕ                                22
 
 
   3.1.    Квалификаторы команд SORT и MERGE                22
 
   3.1.1.    Квалификатор /CHECK_SEQUENCE                   22
 
   3.1.2.    Квалификатор /COLLATING_SEQUENCE               23
 
   3.1.3.    Квалификатор /DUPLICATES                       24
 
 
                             - 4 -
 
                         00152-01 33 06
 
 
   3.1.4.    Квалификатор /KEY                              25
 
   3.1.5.    Квалификатор /PROCESS                          30
 
   3.1.6.    Квалификатор /SPECIFICATION                    33
 
   3.1.7.    Квалификатор /STABLE                           35
 
   3.1.8.    Квалификатор /STATISTICS                       36
 
   3.1.9.    Квалификатор /WORK_FILES                       40
 
   3.2.    Квалификатор входного файла                      41
 
   3.3.    Квалификаторы выходного файла                    44
 
   3.3.1.    Квалификатор /ALLOCATION                       44
 
   3.3.2.    Квалификатор /BUCKET_SIZE                      45
 
   3.3.3.    Квалификатор /CONTIGUOUS                       46
 
   3.3.4.    Квалификатор /FORMAT                           47
 
   3.3.5.    Квалификатор /INDEXED_SEQUENTIAL               49
 
   3.3.6.    Квалификатор /OVERLAY                          50
 
   3.3.7.    Квалификатор /RELATIVE                         51
 
   3.3.8.    Квалификатор /SEQUENTIAL                       52
 
   3.4.    Квалификаторы файла спецификаций                 53
 
   3.4.1.    Квалификатор /CDD_PATH_NAME                    53
 
   3.4.2.    Квалификатор /CHECK_SEQUENCE                   54
 
   3.4.3.    Квалификатор /COLLATING_SEQUENCE               55
 
   3.4.4.    Квалификатор /CONDITION                        62
 
   3.4.5.    Квалификатор /DATA                             65
 
   3.4.6.    Квалификатор /FIELD                            68
 
   3.4.7.    Квалификатор /INCLUDE                          70
 
   3.4.8.    Квалификатор /KEY                              72
 
   3.4.9.    Квалификатор /OMIT                             74
 
   3.4.10.   Квалификатор /PAD                              75
 
   3.4.11.   Квалификатор /PROCESS                          77
 
   3.4.12.   Квалификатор /STABLE                           77
 
   3.4.13.   Квалификатор /WORK_FILES                       78
 
 
                             - 5 -
 
                         00152-01 33 06
 
 
   3.4.14.   Пример файла спецификации                      79
 
 
   4.  ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ                            81
 
 
   5.  СООБЩЕНИЯ                                            82
 
 
   ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ                            83

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 5K -
 
                      2б.00152-01 33 06
 
 
                            - 5K -
 
                      2б.00152-01 33 06
 
 
3.4.14.   Пример файла спецификации                      79
 
 
4.        Входные и выходные данные                      81
 
 
5.        Сообщения                                      82

    ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ                        83К
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                             - 6 -
 
                         00152-01 33 06
 
 
          1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ
 
 
 
 
        С целью упрощения  изложения  материала  в  дальнейшем
 
   используется термин "программа сортировки" в случае исполь-
 
   зования программы с целью сортировки и "программа  слияния"
 
   - в случае операции слияния.
 
 
        Программа сортировки (SORT)  может  быть  использована
 
   для упорядочения записей одного  или  нескольких  файлов  в
 
   соответствии со значением определенных полей записей и соз-
 
   дания одного упорядоченного файла.
 
 
        Программа слияния (MERGE) сливает  до  десяти  заранее
 
   отсортированных файлов и создает один упорядоченный файл.
 
 
        В командах SORT и  MERGE  указываются  два  параметра:
 
   входной файл(ы) и выходной файл. Спецификации входных  фай-
 
   лов должны разделяться запятыми. По  умолчанию  принимается
 
   тип файла DAT.
 
 
        Может быть определен только один выходной  файл.  Если
 
   тип файла опущен, то принимается тип первого входного  фай-
 
   ла.
 
 
        По команде SORT вызывается программа сортировки систе-
 
   мы МОС ВП для СМ1700, по команде MERGE - программа слияния.
 
 
        После окончания  работы  программа  сортировки/слияния
 
   обеспечивает возврат пользователя к интерпретатору  команд-
 
   ного языка DCL, описанного в документе [1].
 
 
        Пользователь определяет место вывода результатов  этих
 
   программ с помощью параметра выходного файла.
 
 
                             - 7 -
 
                         00152-01 33 06
 
 
        Программа сортировки/слияния функционирует при следую-
 
   щей минимальной конфигурации технических средств:
 
 
        - процессор СМ1700;
 
 
        - озу емкость 1 мбайт;
 
 
        - накопитель на магнитных дисках;
 
 
        - видеотерминал.
 
 
        Дополнительно может использоваться следующее  оборудо-
 
   вание:
 
 
        - накопители на магнитных лентах;
 
 
        - дополнительные накопители на магнитных дисках;
 
 
        - аппаратура связи для об'единения  нескольких  эвм  в
 
   сеть.
 
 
        Программа функционирует под  управлением  операционной
 
   системы  МОС  ВП,  включающей  систему  управления  данными
 
   СУД-32. Программа поддерживает систему управления словарями
 
   СЛОВАРЬ-32. В словарь могут быть включены описания структур
 
   записей файлов, используемых при сортировке или слиянии.
 
 
        Для  успешного  использования  обслуживающих  программ
 
   сортировки и слияния следует также ознакомиться с  докумен-
 
   тами [1] и [2].
 
 
        В данном  документе  используются  следующие  условные
 
   обозначения:
 
 
        - вертикальная последовательность точек означает,  что
 
   либо показаны не все  данные,  воспроизводимые  системой  в
 
 
                             - 8 -
 
                         00152-01 33 06
 
 
   ответ на конкретную команду, либо показаны не  все  данные,
 
   вводимые пользователем;
 
 
        - горизонтальное многоточие указывает, что могут  быть
 
   введены дополнительные параметры или значения;
 
 
        - параметр, заключенный в  квадратные  скобки,  указы-
 
   вает, что он не является обязательным (дополнительный  эле-
 
   мент). Однако квадратные скобки являются обязательным  эле-
 
   ментом в синтаксисе имени каталога в спецификации файла или
 
   в синтаксисе спецификации подцепочки в  операторе  присвое-
 
   ния.
 
 
 
 
                  2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ
 
 
 
 
        Программа сортировки SORT системы МОС ВП для  вычисли-
 
   тельного комплекса СМ1700 обеспечивает  сортировку  записей
 
   одного или нескольких входных файлов в соответствии с  выб-
 
   ранным полем (или полями) и генерирует  один  упорядоченный
 
   выходной файл. Программа слияния MERGE обеспечивает слияние
 
   до десяти входных файлов, которые были до этого  отсортиро-
 
   ваны в соответствии с тем же полем (полями),  и  генерирует
 
   один выходной файл.
 
 
 
        2.1. Программа сортировки SORT
 
 
 
        Данная программа упорядочивает записи из входного фай-
 
   ла (или файлов) в соответствии с определяемым  ключом  (или
 
   ключами). Записи могут быть организованы  в  убывающем  или
 
   возрастающем порядке, в алфавитном или цифровом  порядке  в
 
 
                             - 9 -
 
                         00152-01 33 06
 
 
   зависимости от того, как описан соответствующий ключ.  Нап-
 
   ример,  каждая  запись  файла  NAMES.DAT,  приведенного  на
 
   рис.1, состоит из двух  полей  -  поля  имени  потребителя,
 
   занимающего первые 13 символов,  и  поля  учетного  номера.
 
   Поле учетного номера начинается с  16-й  позиции  записи  и
 
   составляет 5 цифр.
 
 
 
                         NAMES.DAT
                     имя           номер
 
                  MCKEE MICHAEL    64388
                  ERICKSON SAM     72931
                  WILSON BRENT     16639
                  COOLIDZE SUE     98034
                  RICE ANNE        75373
 
                             рис. 1
 
 
        Для создания нового файла BILLING.LIS с записями файла
 
   NAMES.DAT, организованными в соответствии с учетными  номе-
 
   рами, пользователь должен описать поле ключа учетного номе-
 
   ра с помощью квалификатора /KEY.
 
 
        Квалификатор /KEY определяет следующую информацию:
 
 
          - позицию ключа в записи;
 
 
          - размер ключа;
 
 
          - тип данных ключа;
 
 
          - порядок операции сортировки.
 
 
        Помимо описания поля ключа необходимо  также  передать
 
   программе сортировки спецификацию входного файла и специфи-
 
   кацию выходного файла.  Для  получения  файла  BILLING.LIS,
 
   указанного на рис.2, может быть использована команда:
 
 
 
 
                            - 10 -
 
                         00152-01 33 06
 
 
          $ SORT/KEY=(POSITION:16,SIZE:5,DECIMAL) -
 
          _$ NAMES.DAT BILLING.LIS
 
 
 
                      Пример сортировки
 
             NAMES.DAT                       BILLING.LIS
 
       MCKEE MICHAEL    64388          WILSON BRENT     16639
       ERICKSON SAM     72931          MCKEE MICHAEL    64388
       WILSON BRENT     16639 ======>  ERICKSON SAM     72931
       COOLIDZE SUE     98034          RICE ANNE        75373
       RICE ANNE        75373          COOLIDZE SUE     98034
 
                             рис. 2
 
 
        По умолчанию программа сортировки SORT принимает  сле-
 
   дующее описание ключа:
 
 
        - поле ключа начинается с первой позиции записи;
 
 
        - поле ключа включает всю запись;
 
 
        - поле ключа содержит символьные данные, т.е. символы;
 
 
        - сортировка будет выполняться в возрастающем порядке.
 
 
        Для создания выходного файла BILLING.LIS, записи кото-
 
   рого расположены в алфавитном порядке по имени потребителя,
 
   в качестве ключа следует использовать поле имени потребите-
 
   ля. Так как будут сортироваться все записи целиком, а  ключ
 
   имени потребителя содержит символьные данные, которые начи-
 
   наются в первой позиции записи, описывать такое поле  ключа
 
   нет необходимости. Необходимо только передать  спецификации
 
   входного и выходного файла, например:
 
 
        $ SORT NAMES.DAT BILLING.LIS
 
 
        При сортировке по полю ключа,  который  отличается  от
 
   принятой по умолчанию установки, необходимо  описать  такой
 
 
                            - 11 -
 
                         00152-01 33 06
 
 
   ключ с помощью квалификатора /KEY. Подробное описание  ква-
 
   лификаторов приводится в подразделе 3.1.
 
 
 
        2.1.1. Несколько ключей
 
 
 
        Можно выполнять сортировку с более чем  одним  ключом.
 
   Несколько ключей должны определяться в порядке их приорите-
 
   та, т.е. первичный ключ должен определяться первым, вторич-
 
   ный ключ - вторым и т.д. Например, файл  NAMES.DAT  сначала
 
   сортируется по ключу учетного номера, а затем по ключу име-
 
   ни потребителя путем использования команды:
 
 
   $ SORT/KEY=(POSITION:16,SIZE:5,DECIMAL) -
 
   _$/KEY=(POSITION:1,SIZE:13,CHARACTER) NAMES.DAT BILLING.LIS
 
 
 
        2.1.2. Одинаковые ключи
 
 
 
        Если две или несколько записей имеют  одинаковые  поля
 
   ключей, то порядок таких записей в выходном файле  является
 
   непредсказуемым. Путем  определения  квалификатора  /STABLE
 
   можно обеспечить входной порядок записей. Если две или нес-
 
   колько записей имеют одинаковые поля, а пользователь  хочет
 
   сохранить только одну из этих записей, то  следует  указать
 
   квалификатор   /NODUPLICATES.   Квалификаторы   /STABLE   и
 
   /NODUPLICATES не  могут  определяться  одновременно.  Более
 
   подробная информация приводится в пп.3.1.3, 3.1.7.
 
 
 
        2.1.3. Организация выходного файла
 
 
 
        По умолчанию выходной файл имеет такую же организацию,
 
 
 
                            - 12 -
 
                         00152-01 33 06
 
 
   как и первый входной файл. Если организация выходного файла
 
   должна отличаться от организации входного файла, то пользо-
 
   ватель должен определить соответствующий квалификатор после
 
   спецификации выходного файла в  строке  команды  (подраздел
 
   3.3).
 
 
        Если    организация    выходного    файла     является
 
   индексно-последовательной, то такой файл должен уже сущест-
 
   вовать и  быть  пустым.  Необходимо  также  квалифицировать
 
   параметр выходного файла с помощью квалификатора /OVERLAY.
 
 
 
        2.1.4. Процесс сортировки
 
 
 
        Программа сортировки сортирует файлы путем использова-
 
   ния следующих процессов:
 
 
          - RECORD-сортировка;
 
 
          - TAG-сортировка;
 
 
          - ADDRESS-сортировка;
 
 
          - INDEXED-сортировка.
 
 
        По умолчанию выполняется RECORD-сортировка,  во  время
 
   которой обрабатываются целые входные записи и  генерируется
 
   выходной файл из целых записей.  Для  определения  процесса
 
   сортировки  следует  использовать  квалификатор   /PROCESS.
 
   Сравнение процессов сортировки приводится при описании ква-
 
   лификатора /PROCESS в п.3.1.5.
 
 
        Квалификатор /PROCESS может быть использован только  с
 
   командой SORT; процесс не может быть определен для  команды
 
 
 
                            - 13 -
 
                         00152-01 33 06
 
 
   MERGE.
 
 
 
        2.2. Программа слияния MERGE
 
 
 
        Программа слияния выполняет слияние до десяти отсорти-
 
   рованных файлов в один  упорядоченный  выходной  файл.  Все
 
   входные файлы должны иметь одинаковый формат и должны  быть
 
   отсортированы по одинаковому полю (или полям) ключа.
 
 
        На рис.3 приведен пример слияния файлов BILLING1.LIS и
 
   BILLING2.LIS, отсортированных по одинаковому ключу, и  соз-
 
   дания одного выходного файла MAILING.LIS, в котором  содер-
 
   жатся все записи входных файлов.  Для  слияния  может  быть
 
   использована команда:
 
 
        $ MERGE BILLING1.LIS,BILLING2.LIS MAILING.LIS
 
 
 
                      Пример слияния
 
     BILLING1.LIS
   COOLIDZE SUE     98034
   ERICKSON SAM     72931                   MAILING.LIS
   MCKEE MICHAEL    64388               BROWN THOMAS     23581
                                        COOLIDZE SUE     98034
        BILLING2.LIS        ========>   ERICKSON SAM     72931
   BROWN THOMAS     23581               MCKEE MICHAEL    64388
   WATERS MARY      44567               WATERS MARY      44567
   WOO LEE          99807               WOO LEE          99807
 
                             рис. 3
 
 
        Операция слияния определяется аналогично операции сор-
 
   тировки с учетом следующих исключений:
 
 
          - пользователь может не определять процесс;
 
 
          - квалификатор /CHECK_SEQUENCE используется только в
 
            операции слияния.
 
 
 
                            - 14 -
 
                         00152-01 33 06
 
 
        По умолчанию программа слияния  проверяет  упорядочен-
 
   ность записей. В случае нарушения упорядоченности  выдается
 
   диагностическое сообщение и обработка продолжается.
 
 
 
        2.3. Последовательность упорядочения
 
 
 
        Программа сортировки/слияния может упорядочивать  дан-
 
   ные в соответствии со следующими последовательностями:
 
 
          - последовательность кода ASCII;
 
 
          - последовательность кода EBCDIC.
 
 
        По умолчанию выбирается последовательность кода ASCII.
 
   Когда упорядочиваются данные в  соответствии  с  последова-
 
   тельностью кода EBCDIC, выходной файл организуется в  соот-
 
   ветствии с последовательностью EBCDIC, но данные остаются в
 
   представлении кода ASCII.
 
 
        Более подробная информация относительно этих  последо-
 
   вательностей приводится в п.3.1.2.
 
 
        Пользователь может также определить  свою  собственную
 
   последовательность сортировки или модифицировать последова-
 
   тельность ASCII или EBCDIC путем использования квалификато-
 
   ра /COLLATING_SEQUENCE, приведенного в п.3.4.3.
 
 
 
        2.4. Файл спецификаций сортировки и слияния
 
 
 
        Файл спецификаций сортировки и слияния позволяет поль-
 
   зователю выполнять следующие функции:
 
 
 
 
 
                            - 15 -
 
                         00152-01 33 06
 
 
        - выбрать записи, которые должны быть включены в  опе-
 
   рацию сортировки и слияния;
 
 
        - изменить формат записей выходного файла;
 
 
        - использовать условные ключи или данные;
 
 
        - определить несколько форматов записей;
 
 
        - создать или изменить  последовательность  упорядоче-
 
   ния;
 
 
        - изменить размещение рабочих файлов;
 
 
        - использовать часто используемые операции  сортировки
 
   и слияния.
 
 
        Для создания  файла  спецификаций  можно  использовать
 
   универсальный текстовый редактор [3]. Многие из  квалифика-
 
   торов, используемых в файле спецификаций, аналогичны квали-
 
   фикаторам командной строки. Каждый из  квалификаторов  под-
 
   робно описывается в подразделе 3.4.
 
 
        Порядок следования квалификаторов в файле спецификаций
 
   является свободным. Однако, этот порядок становится  важным
 
   фактором при сортировке по более чем одному полю ключа, при
 
   описании выходного формата  и  при  определении  нескольких
 
   типов  записей.  При  определении   ключевых   слов   FOLD,
 
   MODIFICATION и IGNORE с квалификатором /COLLATINNG_SEQUENCE
 
   необходимо определять все статьи MODIFICATION и  IGNORE  до
 
   статей FOLD. Более подробно это описывается  в  п.3.4.3.  В
 
   файл спецификаций могут быть включены комментарии.  Призна-
 
   ком комментария  является  восклицательный  знак  в  начале
 
   строки.
 
 
                            - 16 -
 
                         00152-01 33 06
 
 
        После создания текста файла спецификаций следует  ука-
 
   зать   имя   этого   файла    с    помощью    квалификатора
 
   /SPECIFICATION. По умолчанию для файла спецификаций  прини-
 
   мается тип файла SRT.
 
 
        Любые квалификаторы,  указанные  в  команде  SORT  или
 
   MERGE, отвергают (заменяют) соответствующие записи в тексте
 
   файла спецификаций. Например, если  пользователь  указывает
 
   любой квалификатор /KEY в строке команды DCL, то  программы
 
   сортировки и слияния игнорируют любые указания /KEY, /DATA,
 
   /INCLUDE и /OMIT в тексте файла спецификаций.
 
 
 
        2.5. Запуск сортировки с терминала
 
 
 
        При запуске сортировки в интерактивном режиме с терми-
 
   нала следует определить SYS$INPUT в качестве входного  фай-
 
   ла, указывая размер самой длинной записи (в байтах) и приб-
 
   лизительный размер входного файла (в блоках).  После  ввода
 
   команды следует вводить входные записи. Следует заканчивать
 
   ввод каждой записи путем нажатия клавиши <вк>, а ввод файла
 
   - путем нажатия клавиш <ус/Z>.
 
 
        Пример.
 
 
   $ SORT/KEY=(POSITION:8,SIZE:20)-
 
   _ $SYS$INPUT/FORMAT=(RECORD_SIZE=27, FILE_SIZE=10) NAME.LST
   B 2376 FRENCH MARILYN
   V 3899 ROSE JACK
           .
           .
           .
   *EXIT*
 
 
        В  примере  предусмотрено  создание  выходного   файла
 
   NAME.LST, в котором содержатся отсортированные записи, вве-
 
 
                            - 17 -
 
                         00152-01 33 06
 
 
   денные с терминала.
 
 
 
        2.6. Пакетное задание сортировки и слияния
 
 
 
        Можно выполнять операцию сортировки или слияния в фор-
 
   ме пакетного задания, освобождая терминал для другой  рабо-
 
   ты. Для этого следует  создать  командную  процедуру  языка
 
   команд DCL, описанную в документе [1],  содержащую  команды
 
   сортировки и слияния.  Следует  выполнить  такую  процедуру
 
   путем использования команды SUBMIT. Более подробная  инфор-
 
   мация относительно пакетных заданий приводится в  документе
 
   [4].
 
 
 
        2.7. Оптимизация
 
 
 
        Если пользователь неудовлетворен эффективностью опера-
 
   ции сортировки или слияния, то можно исследовать  ряд  воз-
 
   можностей повышения эффективности. В первую очередь следует
 
   оценить информацию, полученную путем использования квалифи-
 
   катора /STATISTICS (п.3.1.8). После просмотра соответствую-
 
   щей информации (статистики) следует  рассмотреть  возможные
 
   варианты оптимизации,  представленные  в  пп.2.7.1,  2.7.2,
 
   2.7.3, 2.7.4, 2.7.5.
 
 
 
        2.7.1. Возможности
 
 
 
        Можно повысить эффективность сортировки путем  исполь-
 
   зования  файла  спецификаций.   Квалификаторы   /CONDITION,
 
   /INCLUDE и /OMIT  могут  быть  использованы  для  включения
 
   только тех записей, которые должны быть в  выходном  файле.
 
 
                            - 18 -
 
                         00152-01 33 06
 
 
   квалификаторы файла спецификаций  могут  быть  использованы
 
   для изменения формата записей  с  целью  удаления  ненужных
 
   полей из выходных записей.
 
 
        Более подробно это описывается в подразделе 3.4.
 
 
 
        2.7.2. Размещение рабочих файлов
 
 
 
        Можно повысить эффективность сортировки путем размеще-
 
   ния рабочих файлов на устройствах с  произвольным  доступом
 
   (например, на магнитных дисках). Обычно,  программа  сорти-
 
   ровки помещает рабочие файлы в каталог SYS$SCRATCH. Однако,
 
   размещение рабочих файлов  на  отдельных  магнитных  дисках
 
   обеспечивает совмещение или перекрытие цикла  чтения-записи
 
   данных. Для обеспечения максимальной  эффективности  сорти-
 
   ровки следует размещать рабочие файлы:
 
 
        - на свободном устройстве (устройствах) с максимальным
 
   быстродействием;
 
 
        - на наименее занятом устройстве (устройствах);
 
 
        - на устройстве  (устройствах),  имеющем  максимальную
 
   доступную емкость;
 
 
        - на отдельных устройствах.
 
 
        На уровне языка команд DCL, описанном в документе [1],
 
   можно  выбирать  размещение  любого  рабочего  файла  путем
 
   использования команды:
 
 
        $ ASSIGN устройство: SORTWORKN
 
 
 
 
 
                            - 19 -
 
                         00152-01 33 06
 
 
   где SORTWORKN - логическое имя рабочего файла.
 
 
        Величина N в имени  файла  определяет  номер  рабочего
 
   файла и может принять значения от 0  до  9.  Например,  при
 
   определении /WORK_FILES=3 следует  использовать  логические
 
   имена SORTWORK0, SORTWORK1 и SORTWORK2 для размещения  этих
 
   трех рабочих файлов на разных устройствах. Для  этих  целей
 
   можно также использовать квалификатор /WORK_FILES  в  файле
 
   спецификаций.
 
 
 
        2.7.3. Экстент рабочего набора
 
 
 
        Для сортировки программа SORT распределяет оперативную
 
   память для размещения входного файла, но не более  экстента
 
   рабочего набора. В течение фазы  сортировки  записи  считы-
 
   ваются в эту память вплоть до  ее  заполнения.  Если  об'ем
 
   памяти недостаточен для размещения всех записей,  то  прог-
 
   рамма сортировки пересылает отсортированные цепочки записей
 
   в рабочий файл.
 
 
        Когда операция  сортировки  использует  рабочие  файлы
 
   (это происходит в большинстве  случаев  сортировки  больших
 
   файлов), больший рабочий  набор  увеличивает  эффективность
 
   сортировки.
 
 
        Иногда является желательным  меньшая  емкость  памяти.
 
   Если система интенсивно используется, то  средства  МОС  ВП
 
   могут оказаться не в состоянии распределить все страницы  в
 
   экстенте рабочего набора процессу пользователя. Во  избежа-
 
   ние излишнего обмена страниц в сильно  загруженной  системе
 
   следует уменьшить экстент рабочего набора.  Лучшим  методом
 
 
 
                            - 20 -
 
                         00152-01 33 06
 
 
   является  использование  квалификатора  /FORMAT=FILE_SIZE:N
 
   (подраздел 4.5) для установки величины,  которая  несколько
 
   меньше экстента рабочего набора. Данный способ  приводит  к
 
   тому, что программа сортировки использует меньше  памяти  и
 
   обеспечивает меньшее число обмена страниц на сильно  загру-
 
   женной системе.
 
 
 
        2.7.4. Квалификаторы оптимизации сортировки
 
 
 
        С целью оптимизации  операции  сортировки  могут  быть
 
   использованы квалификаторы:
 
 
        - /STATISTICS - воспроизведение статистической  инфор-
 
   мации;
 
 
        - /ALLOCATION -  распределение  памяти  для  выходного
 
   файла;
 
 
        - /CONTIGUOUS  -  распределение  непрерывной   области
 
   памяти для  выходного  файла  (совместно  с  квалификатором
 
   /ALLOCATION);
 
 
        - /BUCKET_SIZE - определение размера бакета;
 
 
        - /FORMAT - определение  размера  входного  файла  или
 
   формата выходного файла;
 
 
        - /WORK_FILES - установка числа рабочих файлов;
 
 
        - /PROCESS - определение процесса сортировки.
 
 
        Эти квалификаторы подробно описываются в разделе 3.
 
 
 
 
 
 
                            - 21 -
 
                         00152-01 33 06
 
 
        2.7.5. Возможности администратора
 
 
 
        Одним из способов повышения эффективности  сортировки,
 
   который  может  быть  применен  системным  администратором,
 
   является выделение одной  очереди  пакетной  обработки  для
 
   заданий сортировки и обеспечение  для  этой  очереди  очень
 
   большой квоты рабочего набора.
 
 
        Кроме того, параметры процесса задания могут быть сог-
 
   ласованы для получения максимальной эффективности сортиров-
 
   ки. Рекомендуется использовать следующие параметры:
 
 
        1)  экстент  рабочего  набора  процесса  (WSEXTENT   и
 
   WSAUTHEXT). Эта величина должна быть установлена на  макси-
 
   мальное значение, которое  может  когда-либо  потребоваться
 
   любому заданию сортировки. При меньшем рабочем наборе  мед-
 
   леннее выполняется сортировка. Для больших  файлов  обосно-
 
   ванными являются рабочие наборы от 500 до 1000 страниц (при
 
   условии, что система имеет достаточный об'ем памяти для  их
 
   обеспечения). Для предотвращения монополизации  пользовате-
 
   лем фактической памяти системный администратор может  уста-
 
   новить индивидуальные максимумы для отдельных пользователей
 
   с помощью файла авторизации;
 
 
        2)     число     виртуальных     страниц      процесса
 
   (VIRTUALPAGECNT). Для максимальной эффективности сортировки
 
   данный параметр должен быть установлен как минимум на  1000
 
   страниц больше, чем максимальный экстент  рабочего  набора.
 
   Хотя утилита сортировки ограничивается использованием  экс-
 
   тента рабочего  набора  процесса,  в  случае  использования
 
   рабочих файлов программа  потребует  дополнительную  память
 
 
 
                            - 22 -
 
                         00152-01 33 06
 
 
   для буферов ввода-вывода. Если данный параметр слишком  мал
 
   относительно экстента рабочего набора, то может  возникнуть
 
   такая ситуация, при которой программа сортировки не  сможет
 
   создать буфера для рабочих файлов, а входные файлы не могут
 
   быть отсортированы в памяти.
 
 
 
 
                    3. ОБРАЩЕНИЕ К ПРОГРАММЕ
 
 
 
 
 
        3.1. Квалификаторы команд SORT и MERGE
 
 
 
        Квалификаторы команд SORT и MERGE позволяют  пользова-
 
   телю определять поля ключей, описывать данные в этих  полях
 
   и определять различные варианты выполнения сортировки.
 
 
 
        3.1.1. Квалификатор /CHECK_SEQUENCE
 
 
 
        Данный квалификатор обеспечивает  проверку  последова-
 
   тельности записей во входных файлах при слиянии. По умолча-
 
   нию программа слияния выполняет проверку последовательности
 
   записей.
 
 
        Формат:
 
 
   /[NO]CHECK_SEQUENCE
 
 
        Данный  квалификатор  используется  только  программой
 
   слияния.
 
 
        Можно использовать данный квалификатор также для  про-
 
   верки того, что записи одного или нескольких файлов (макси-
 
 
 
                            - 23 -
 
                         00152-01 33 06
 
 
   мально 10 файлов) отсортированы. Такие записи в любом  слу-
 
   чае будут направляться в выходной файл, который должен быть
 
   определен пользователем.
 
 
        Примеры:
 
 
   1. $ MERGE/KEY=(SIZE:1,POSITION:3)/NOCHECK_SEQUENCE  -
 
   _$PRICE1.DAT,PRICE2.DAT PRICE.LIS
 
 
        Квалификатор /NOCHECK_SEQUENCE указывает, что последо-
 
   вательность входных файлов PRICE1.DAT и PRICE2.DAT не долж-
 
   на проверяться, так как записи в этих файлах  отсортированы
 
   по одинаковому ключу и последовательность записей  правиль-
 
   на.
 
 
   2. $ MERGE/SPECIFICATION=PAYROLL.SRT/CHECK_SEQUENCE -
 
    _$MAY3.DAT,MAY10.DAT,MAY17.DAT,MAY24.DAT TOTAL.LIS
 
 
        Так как файл спецификаций  PAYROLL.SRT  не  определяет
 
   проверку последовательности, квалификатор /CHECK_SEQUENCE в
 
   строке команды MERGE необходим для отмены этой  инструкции.
 
   Последовательность записей в четырех входных  файлах  будет
 
   проверяться.
 
 
 
        3.1.2. Квалификатор /COLLATING_SEQUENCE
 
 
 
        Данный квалификатор обеспечивает выбор одного из  двух
 
   заранее определенных  последовательностей  для  символьного
 
   ключа. По  умолчанию  принимается  последовательность  кода
 
   ASCII. Также  может  быть  использована  последовательность
 
   кода EBCDIC.
 
 
 
 
 
                            - 24 -
 
                         00152-01 33 06
 
 
        Формат:
 
 
   /COLLATING_SEQUENCE=тип
 
   где тип может принять значения:
 
 
        1) ASCII - данный квалификатор обеспечивает упорядоче-
 
   ние символов  в  соответствии  с  последовательностью  кода
 
   ASCII. Эта последовательность является  последовательностью
 
   по умолчанию и ее определение может быть опущено;
 
 
        2) EBCDIC - данный квалификатор обеспечивает  упорядо-
 
   чение символов в соответствии  с  последовательностью  кода
 
   EBCDIC. Символы при  этом  остаются  в  представлении  кода
 
   КОИ-8, изменяется только порядок.
 
 
        Пример.
 
 
   $ SORT/COLLATING_SEQUENCE=EBCDIC NAMES.DAT,NOM.DAT LIST.LIS
 
 
        Данная команда SORT  обеспечивает  размещение  записей
 
   файлов NAMES.DAT и NOM.DAT  в  выходном  файле  LIST.LIS  в
 
   соответствии с последовательностью сортировки дкои.
 
 
 
        3.1.3. Квалификатор /DUPLICATES
 
 
 
        Данный квалификатор обеспечивает устранение всех запи-
 
   сей с дублированными ключами кроме одной.
 
 
        Формат:
 
 
         /[NO]DUPLICATES
 
 
        По умолчанию программы SORT и MERGE сохраняют записи с
 
   одинаковыми ключами. Квалификатор  /NODUPLICATES  устраняет
 
 
 
                            - 25 -
 
                         00152-01 33 06
 
 
   все записи с одинаковыми ключами кроме  одной.  Сохраняемая
 
   при этом запись непредсказуема. Если пользователю требуется
 
   определить сохраняемую запись, то следует вызвать  SORT  на
 
   программном уровне, используя программу EQUAL-KEY,  описан-
 
   ную в документе [5].
 
 
        Квалификаторы /STABLE и /NODUPLICATES  являются  взаи-
 
   моисключающими.
 
 
        Пример.
 
 
   $SORT/KEY=(POSITION:3,SIZE:5,DECIMAL)/NODUPLICATES-
 
   _$ACCT1,ACCT2 ACCT.LIS
 
 
        Данная команда  SORT  обеспечивает  упорядочение  двух
 
   входных файлов в соответствии с указанным ключем  и  устра-
 
   няет все записи с равными ключами кроме одной.
 
 
 
        3.1.4. Квалификатор /KEY
 
 
 
        Данный квалификатор обеспечивает  описание  поля  (или
 
   полей) ключа, включая позицию, размер, порядок сортировки и
 
   тип данных. По умолчанию SORT реорганизует файл путем  сор-
 
   тировки целых записей с символьными данными в  возрастающем
 
   порядке. Любой другой тип поля ключа должен быть определен.
 
   При  определении  нескольких  ключей  следует  использовать
 
   отдельный квалификатор /KEY для каждого ключа.
 
 
        Формат:
 
 
         /KEY=(поле[,...])
 
 
   где поле - параметр квалификатора.
 
 
 
                            - 26 -
 
                         00152-01 33 06
 
 
        Допустимы следующие параметры квалификатора /KEY:
 
 
        1) POSITION:N - определяет позицию первого байта  клю-
 
   ча. Могут указываться величины в диапазоне от 1  до  32767.
 
   Первым байтом записи рассматривается позиция 1. Должны быть
 
   определены как позиция, так и размер поля ключа. Десятичный
 
   знак числа, если он хранится в отдельном байте поля  ключа,
 
   учитывается при определении позиции;
 
 
        2) SIZE:N -  определяет  длину  (размер)  поля  ключа.
 
   Должны быть определены как позиция, так и размер поля  клю-
 
   ча. Общий размер всех ключей и исходной длины входной запи-
 
   си должен быть меньше 32767 байтов. Если в отдельном  байте
 
   поля ключа записан десятичный знак числа, то этот байт  при
 
   определении размера данных не учитывается.
 
 
        Тип данных ключа определяет величины,  приемлемые  при
 
   определении размера:
 
 
        - 1 - 32767 символов для символьных данных;
 
 
        - 1, 2, 4, 8 или 16 байтов для двоичных данных;
 
 
        - 1 - 31 цифры для десятичных данных;
 
 
        - для данных с плавающей точкой определение размера не
 
   требуется;
 
 
        3) ASCENDING - обеспечивает порядок операции сортиров-
 
   ки в возрастающем алфавитном или  числовом  порядке.  Такой
 
   порядок принимается по умолчанию;
 
 
        4) DESCENDING - операция сортировки выполняется в убы-
 
   вающем алфавитном или числовом порядке;
 
 
 
                            - 27 -
 
                         00152-01 33 06
 
 
        5) CHARACTER - данный параметр  определяет  символьные
 
   данные в поле ключа. Это тип данных по умолчанию;
 
 
        6) BINARY - определение двоичных данных в поле ключа;
 
 
        7) SIGNED - определение двоичных или десятичных данных
 
   со знаком в поле ключа.  Это  значение  устанавливается  по
 
   умолчанию для двоичных и десятичных данных;
 
 
        8) UNSIGNED - определение двоичных или десятичных дан-
 
   ных без знака в поле ключа;
 
 
        9) F_FLOATING - определение данных формата  F_FLOATING
 
   (формат с плавающей точкой) в поле ключа;
 
 
        10) D_FLOATING - определение формата данных D_FLOATING
 
   в поле ключа;
 
 
        11) G_FLOATING - определение формата данных G_FLOATING
 
   в поле ключа;
 
 
        12) H_FLOATING - определение формата данных H_FLOATING
 
   в поле ключа;
 
 
        13) DECIMAL - определение  десятичных  данных  в  поле
 
   ключа;
 
 
        14) TRAILING_SIGN - определение десятичных  данных  со
 
   знаком в конце поля ключа. Это установка по  умолчанию  для
 
   десятичных данных;
 
 
        15) LEADING_SIGN - определение  десятичных  данных  со
 
   знаком в начале поля ключа;
 
 
        16) OVERPUNCHED_SIGN - определение  десятичных  данных
 
 
 
                            - 28 -
 
                         00152-01 33 06
 
 
   со знаком, совмещенным с цифрой поля ключа.  Это  установка
 
   по умолчанию для десятичных данных;
 
 
        17) SEPARATE_SIGN - определение  десятичных  данных  с
 
   отдельным знаком в поле ключа;
 
 
        18) ZONED - определение зонных десятичных данных (зон-
 
   ный десятичный формат) в поле ключа;
 
 
        19) PACKED_DECIMAL - определение упакованных  десятич-
 
   ных данных в поле ключа;
 
 
        20) NUMBER:N - определение порядка приоритета  каждого
 
   ключа, если пользователь не  приводит  несколько  ключей  в
 
   порядке их приоритета. Данная величина может лежать в  диа-
 
   пазоне от 1 до 255.
 
 
        Квалификатор /KEY определяет всю необходимую  информа-
 
   цию относительно поля ключа. Если файл (или  файлы)  должен
 
   быть отсортирован с использованием целых записей с символь-
 
   ными данными в возрастающем порядке, то определение  инфор-
 
   мации относительно ключа не требуется.
 
 
        Если поле ключа должно быть описано, необходимо  опре-
 
   делить как позицию, так и размер ключа.  Кроме  того,  если
 
   операция сортировки или слияния должна выполняться  в  убы-
 
   вающем алфавитном или цифровом  порядке,  то  при  описании
 
   ключа следует указать параметр квалификатора DESCENDING.
 
 
        Если данные в поле (или полях) ключа не являются  сим-
 
   вольными данными, то  пользователь  должен  определить  тип
 
   данных. Программа поддерживает следующие типы данных:
 
          - CHARACTER;
 
 
 
                            - 29 -
 
                         00152-01 33 06
 
 
          - BINARY,[SIGNED];
 
          - BINARY,UNSIGNED;
 
          - F_FLOATING;
 
          - D_FLOATING;
 
          - G_FLOATING;
 
          - H_FLOATING;
 
          - ZONED;
 
          - DECIMAL[,SIGNED,TRAILING_SIGN,OVERPUNCHED_SIGN];
 
          - DECIMAL,LEADING_SIGN,SEPARATE_SIGN,[SIGNED];
 
          - DECIMAL,LEADING_SIGN,[OVERPUNCHED_SIGN,SIGNED];
 
          - DECIMAL,[TRAILING SIGN],SEPARATE_SIGN,[SIGNED];
 
          - DECIMAL,UNSIGNED;
 
          - PACKED_DECIMAL.
 
 
        П р и м е ч а н и е. Элементы,  указанные  в  скобках,
 
   принимаются по умолчанию; их можно не указывать.
 
 
        В операции сортировки можно определить  до  255  полей
 
   ключей. При определении нескольких ключей они приводятся  в
 
   порядке приоритета.
 
 
        По умолчанию SORT присваивает единицу (1) первому клю-
 
   чу, указанному в строке команды, 2 - второму ключу  и  т.д.
 
   Если пользователь не приводит ключи в порядке их  приорите-
 
   та, то следует определить порядок каждого из них с  помощью
 
   параметра NUMBER:N.
 
 
        Для  каждого  ключа  сортировки  следует  использовать
 
   отдельный квалификатор /KEY. Если SORT обнаруживает  повто-
 
   рение параметров в квалификаторе  /KEY  ,  новые  параметры
 
   заменяют ранее указанные параметры.
 
 
 
 
                            - 30 -
 
                         00152-01 33 06
 
 
        Пример.
 
 
   $SORT/KEY=(POS:16,SIZ:3)/KEY=(POS:1,SIZ:11) -
 
   _$/KEY=(POS:40,SIZ:2,DESC) YRENDAVG.DAT YRAVGSRT.LIS
 
 
 
        Данная команда SORT определяет три поля ключей.  Вход-
 
   ной файл YRENDAVG будет сортироваться по ключу,  начинающе-
 
   муся в позиции 16, затем по ключу, начинающемуся в  позиции
 
   1, а после этого по ключу, который начинается в позиции 40.
 
   Третий используемый ключ вызывает  сортировку  в  убывающем
 
   порядке.
 
 
 
        3.1.5. Квалификатор /PROCESS
 
 
 
        Данный квалификатор определяет внутренний процесс сор-
 
   тировки и позволяет делать выбор одного из четырех  процес-
 
   сов: RECORD, TAG, ADDRESS или INDEX. По умолчанию программа
 
   SORT использует RECORD процесс сортировки. Данный  квалифи-
 
   катор используется только с программой сортировки.
 
 
        Формат:
 
 
        /PROCESS=тип
 
 
   где тип может принять значения:
 
 
        1) RECORD - сортировка и  генерация  выходного  файла,
 
   состоящего из целых записей. Этот процесс является  процес-
 
   сом сортировки, принимаемым по умолчанию;
 
 
        2) TAG - сортировка только ключей, а  затем  повторное
 
   считывание входного файла  для  создания  выходного  файла,
 
   состоящего из целых записей;
 
 
                            - 31 -
 
                         00152-01 33 06
       
 
        3) ADDRESS -  сортировка  только  ключей  и  генерация
 
   выходного файла, записями которого являются двоичные указа-
 
   тели на входные записи;
 
 
        4) INDEX - сортировка только ключей и генерация выход-
 
   ного файла, записи которого содержат ключи и двоичные  ука-
 
   затели на входные записи.
 
 
        Эти четыре процесса дают  различные  форматы  выходных
 
   файлов; они также  отличаются  требованиями  к  устройствам
 
   ввода и вывода и методами обработки.
 
 
        При выборе процесса сортировки следует учитывать  сле-
 
   дующее:
 
 
        1) использование выходного файла:
 
 
        - так как RECORD и TAG  сортировка  генерирует  файлы,
 
   содержащие целые отсортированные записи, эти  упорядоченные
 
   файлы готовы к использованию;
 
 
        - выходные файлы, полученные по ADDRESS или INDEX сор-
 
   тировке, могут  обрабатываться  программой,  написанной  на
 
   языках бэйсик, макро или блисс в основном режиме;
 
 
        - ADDRESS сортировка создает список указателей записей
 
   во входном файле. Этот список состоит из  двоичных  адресов
 
   записей в файле (RFA) и номера файла (при  сортировке  нес-
 
   кольких входных файлов). Программа получает доступ к  запи-
 
   сям путем использования указателей;
 
 
        - INDEX сортировка создает выходной  файл,  содержащий
 
   как адреса записей файла (RFA), так и поля ключей, а  также
 
   номер файла при сортировке нескольких файлов.  Формат  этих
 
 
                            - 32 -
 
                         00152-01 33 06
 
 
   полей ключей соответсвует их  формату  во  входных  файлах.
 
   Если программе требуется содержимое поля ключа для принятия
 
   решения в течение дальнейшей обработки, то следует выбирать
 
   INDEX сортировку вместо ADDRESS сортировки.
 
 
        Если требуется несколько вариантов одного файла,  упо-
 
   рядоченного несколькими способами для разных целей, то сле-
 
   дует получить несколько выходных файлов ADDRESS  или  INDEX
 
   сортировки и использовать эти файлы для доступа к записям в
 
   файле в требуемом порядке сортировки;
 
 
        2)  имеющееся  для  сортировки  пространство   (размер
 
   области) временной памяти:
 
 
        - TAG сортировка использует  меньший  об'ем  временной
 
   памяти, чем RECORD сортировка. Так  как  RECORD  сортировка
 
   работает с записями в течение  сортировки,  она  использует
 
   значительно большую рабочую  область  при  наличии  больших
 
   файлов;
 
 
        - ADDRESS  и  INDEX  сортировка  использует  небольшой
 
   об'ем временной памяти;
 
 
        3) тип используемых устройств ввода и вывода:
 
 
        - RECORD сортировка является  единственным  процессом,
 
   который обеспечивает возможность ввода с перфокарт, магнит-
 
   ной ленты и диска;
 
 
        - результат TAG и RECORD сортировки можно  вывести  на
 
   любое устройство вывода;
 
 
        - результат ADDRES и INDEX  сортировки  можно  вывести
 
   только на устройство, которое воспринимает двоичные данные;
 
 
                            - 33 -
 
                         00152-01 33 06
 
 
        4) различия в скорости:
 
 
        - при необходимости извлечения отсортированных записей
 
   в некоторой точке операции RECORD сортировка обычно являет-
 
   ся самым быстродействующим процессом;
 
 
        - так как TAG сортировка  выполняет  пересылку  только
 
   ключей, а не целых записей, она может  выполняться  быстрее
 
   RECORD сортировки при большом размере записи и малом разме-
 
   ре ключа. TAG сортировка может оказаться более быстродейст-
 
   вующей также для очень больших файлов и устройств  с  малым
 
   временем установки (головок). Однако,  в  большинстве  слу-
 
   чаев, время, которое занимает TAG сортировка для повторного
 
   доступа к входному файлу с целью создания выходного  файла,
 
   делает ее более медленной, чем RECORD сортировка;
 
 
        - ADDRESS и INDEX сортировки являются  самыми  быстро-
 
   действующими процессами.
 
 
        Пример.
 
 
   $SORT/KEY=(POS:40,SIZ:2,DESC)/PROCESS=TAG YRENDAVG.DAT-
 
   _$DESCYRAVG.LIS
 
 
        В данном примере SORT использует  TAG  сортировку  для
 
   создания выходного файла DESCYRAVG.LIS.
 
 
 
        3.1.6. Квалификатор /SPECIFICATION
 
 
 
        Данный квалификатор определяет файл  спецификаций  для
 
   SORT или MERGE.
 
 
 
 
 
 
                            - 34 -
 
                         00152-01 33 06
 
 
        Формат:
 
 
        /SPECIFICATION=спецификация-файла
 
 
   где спецификация-файла  -  определение  файла  спецификаций
 
   SORT или MERGE. Типом файла по умолчанию является тип SRT.
 
 
        Квалификатор /SPECIFICATION определяет файл специфика-
 
   ций, который должен быть использован в операциях сортировки
 
   или слияния. Файл спецификаций обеспечивает для пользовате-
 
   ля следующие возможности:
 
 
        - изменение формата и длины записей в выходном файле;
 
 
        - условное изменение порядка записей и полей данных;
 
 
        - удаление указанных записей из процесса;
 
 
        - включение указанных записей в процесс;
 
 
        - изменение способа упорядочения символов;
 
 
        - размещение рабочих файлов;
 
 
        - определение часто используемых  операций  сортировки
 
   или слияния.
 
 
        Более подробная информация относительно файлов  специ-
 
   фикаций приводится в подразделе 3.4.
 
 
        Пример.
 
 
   $SORT/SPECIFICATION=ACCTS.SRT SALES1.DAT,SALES2.DAT -
 
   _$MALLING.LIS
 
 
        В данном примере команда SORT обеспечивает организацию
 
   входных файлов в соответствии с инструкциями,  приведенными
 
 
                            - 35 -
 
                         00152-01 33 06
 
 
   в файле спецификаций ACCTS.SRT.
 
 
 
        3.1.7. Квалификатор /STABLE
 
 
 
        Данный квалификатор направляет  записи  с  одинаковыми
 
   ключами в выходной файл в том порядке, в котором они  нахо-
 
   дятся в соответствующем входном файле. По умолчанию  прини-
 
   мается условие /NOSTABLE.
 
 
        Формат:
 
 
        /[NO]STABLE
 
 
        Когда входной файл (или файлы) содержит записи с  оди-
 
   наковыми ключами, такие записи группируются в непредсказуе-
 
   мом порядке. Определение квалификатора /STABLE обеспечивает
 
   организацию записей с равными  ключами  при  выводе  в  том
 
   порядке, в котором они находятся  во  входных  файлах.  При
 
   использовании данного квалификатора при сортировке несколь-
 
   ких входных файлов в выходном файле  записи  с  одинаковыми
 
   ключами из первого  файла  будут  предшествовать  таким  же
         
   записям из второго файла и т.д.
 
 
        Квалификаторы /STABLE и /NODUPLICATES  являются  взаи-
 
   моисключающими.
 
 
        Пример.
 
 
       $SORT/KEY=(POS:1,SI:5,DECIMAL)/STABLE PRICESA.DAT-
 
       _$PRICESB.DAT,PRICESC.DAT SUMMARY.LIS
 
 
        В данной операции сортировки записи с одинаковыми клю-
 
   чами из файла PRICESA.DAT будут выводиться первыми, за ними
 
 
 
                            - 36 -
 
                         00152-01 33 06
 
 
   будут следовать записи из файла PRICESB.DAT, а за ними - из
 
   файла PRICESC.DAT.
 
 
 
        3.1.8. Квалификатор /STATISTICS
 
 
 
        Данный квалификатор обеспечивает воспроизведение свод-
 
   ной статистической информации, которая может быть использо-
 
   вана для оптимизации.
 
 
        Формат:
 
 
        /STATISTICS
 
 
        При использовании данного квалификатора программы SORT
 
   и MERGE обеспечивают воспроизведение статистической  инфор-
 
   мации на устройстве  SYS$OUTPUT.  Данная  статистика  может
 
   быть использована для решения вопроса об эффективности опе-
 
   рации упорядочения, а также для  определения  изменений  по
 
   улучшению ее производительности. Для  записи  и  сохранения
 
   этой статистики  в  файле  следует  использовать  указанную
 
   команду:
 
 
        $DEFINE/USER SYS$ERROR выходной-файл
 
 
 
        Пример распечатки статистической информации приводится
 
   на рис.4.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 37 -
 
                         00152-01 33 06
 
 
              Пример статистической информации
 
                M32/VOS SORT/MERGE STATISTICS
 
   RECORDS READ:         NNN  INPUT RECORD LENGTH:         NNN
   RECORDS SORTED:       NNN  INTERNAL LENGTH:             NNN
   RECORDS OUTPUT:       NNN  OUTPUT RECORD LENGTH:        NNN
   WORKING SET EXTENT:   NNN  SORT TREE SIZE:              NNN
   VIRTUAL MEMORY:       NNN  NUMBER OF INITIAL RUNS:      NNN
   DIRECT I/O:           NNN  MAXIMUM MERGE ORDER:         NNN
   BUFFERED I/O:         NNN  NUMBER OF MERGE PASSES:      NNN
   PAGE FAULTS:          NNN  WORK FILE ALLOCATION:        NNN
   ELAPSED TIME: NN:NN:NN.NN  ELAPSED CPU:         NN:NN:NN.NN
 
                             рис. 4
 
 
        Число считанных записей  (RECORDS  READ)  представляет
 
   собой число записей, которые считаны  программой  SORT  или
 
   MERGE.
 
 
        Число отсортированных записей (RECORDS SORTED) опреде-
 
   ляет число записей, которые были отсортированы.  Это  число
 
   может быть меньше числа считанных записей при использовании
 
   файла спецификаций для выбора только  определенных  записей
 
   для операции сортировки или слияния.
 
 
        Число выходных записей (RECORDS  OUTPUT)  представляет
 
   собой число записей, записанных в выходной файл. Это  число
 
   может быть меньше числа отсортированных записей при условии
 
   выбора квалификатора  /NODUPLICATES  или  в  случае  ошибок
 
   ввода-вывода при записи выходных записей.
 
 
        Экстент рабочего набора (WORKING SET  EXTENT)  показы-
 
   вает число страниц в  экстенте  рабочего  набора  процесса.
 
   Модификация этой величины является одним из способов  повы-
 
   шения эффективности операции сортировки.
 
 
        Виртуальная память (VIRTUAL MEMORY) представляет собой
 
   число страниц виртуальной памяти, добавленных  к  программе
 
 
 
                            - 38 -
 
                         00152-01 33 06
 
 
   SORT для хранения данных.
 
 
        Общая величина прямого  ввода-вывода  (DIRECT  I/O)  и
 
   буферизованного ввода-вывода  (BUFFERED  I/O)  представляет
 
   собой число передач ввода-вывода, необходимых для  считыва-
 
   ния и записи данных. Чем меньше  эта  величина,  тем  более
 
   эффективна операция упорядочения.
 
 
        Число страничных отказов (PAGE FAULTS)  указывает  то,
 
   как данные размещаются в памяти. Чем выше число  страничных
 
   отказов, тем ниже эффективность операции упорядочения.
 
 
        Использованное время (ELAPSED TIME) представляет общее
 
   время, использованное операцией сортировки  или  слияния  в
 
   часах, минутах, секундах и сотых долях секунды.
 
 
        Размер входной записи (INPUT RECORD LENGTH)  обеспечи-
 
   вается средствами системы управления данными, описанными  в
 
   документе [6], если пользователь не определил ее.
 
 
        Внутренняя длина (INTERNAL LENGTH) представляет  собой
 
   размер (в байтах)  узла  внутреннего  формата.  Такой  узел
 
   включает ключи, данные, слово для  хранения  длины,  адреса
 
   записей файла (RFA) и преобразованные ключи.
 
 
        Длина выходной записи (OUTPUT RECORD  LENGTH)  опреде-
 
   ляется, учитывая длину входной записи, процесс сортировки и
 
   изменения формата записи.
 
 
        Размер дерева сортировки (SORT TREE SIZE) представляет
 
   собой число  записей,  которые  размещаются  во  внутренней
 
   структуре данных сортировки.
 
 
 
 
 
                            - 39 -
 
                         00152-01 33 06
 
 
        Число исходных прогонов (NUMBER OF INITIAL RUNS) опре-
 
   деляет размещение данных в памяти.
 
 
        Максимальный порядок об'единения (MAXIMUM MERGE ORDER)
 
   представляет собой максимальное число отсортированных цепо-
 
   чек, которые об'единяются одновременно.
 
 
        Число проходов об'единения (NUMBER  OF  MERGE  PASSES)
 
   представляет собой число об'единений  цепочек,  необходимое
 
   для получения одной отсортированной выходной цепочки. Число
 
   исходных прогонов и число  проходов  об'единения  указывают
 
   степень размещения данных в памяти (т.е. степень соответст-
 
   вия размера данных емкости памяти). Чем выше эти числа, тем
 
   менее соответствует размер рабочего  набора  обрабатываемым
 
   данным, и тем дольше продолжается сортировка.
 
 
        Распределение рабочего файла  (WORK  FILE  ALLOCATION)
 
   представляет собой число блоков, использованных для рабочих
 
   файлов. При необходимости более чем одного прохода  об'еди-
 
   нения этот размер примерно  в  два  раза  превышает  размер
 
   входного файла.
 
 
        Использованное время центрального процессора  (ELAPSED
 
   CPU)  представляет  собой  время  центрального  процессора,
 
   использованное операцией упорядочения; оно не включает вре-
 
   мя,   затраченное   на   ожидание    завершения    операций
 
   ввода-вывода, или время, потраченное на ожидание выполнения
 
   другого процесса.
 
 
        Пример выполнения команды
 
 
        $SORT/STATISTICS PRICE1.DAT,PRICE2.DAT PRICE.LIS
 
 
 
 
                            - 40 -
 
                         00152-01 33 06
 
 
   приводится на рис 5.
 
 
 
               M32/VOS SORT/MERGE STATISTICS
 
   RECORDS READ:         793  INPUT RECORD LENGTH:          80
   RECORDS SORTED:       793  INTERNAL LENGTH:              80
   RECORDS OUTPUT:       793  OUTPUT RECORD LENGTH:         80
   WORKING SET EXTENT:   100  SORT TREE SIZE:              412
   VIRTUAL MEMORY:       433  NUMBER OF INITIAL RUNS:        2
   DIRECT I/O:            22  MAXIMUM MERGE ORDER:           2
   BUFFERED I/O:           9  NUMBER OF MERGE PASSES:        1
   PAGE FAULTS:         3418  WORK FILE ALLOCATION:        114
   ELAPSED TIME: 00:00:05.98  ELAPSED CPU:         00:00:03.63
 
                             рис. 5
 
 
        В  этом  примере  воспроизведения  статистики   размер
 
   структуры данных сортировки ограничен малым экстентом рабо-
 
   чего набора. Удвоение экстента рабочего набора почти удваи-
 
   вает размер структуры данных сортировки. Тогда  все  записи
 
   будут размещены в памяти и рабочие файлы не будут использо-
 
   ваться.
 
              
 
        3.1.9. Квалификатор /WORK_FILES
 
 
 
        Данный квалификатор используется для оптимизации.
 
 
        Формат:
 
 
        /WORK_FILES=N
 
 
   где N - число запрашиваемых рабочих файлов; может быть ука-
 
   зано от 1 до 10 файлов.
 
 
        Программа SORT не создает рабочих файлов, если они  ей
 
   не требуются. Если ей требуются рабочие файлы, то по  умол-
 
   чанию она создает два файла (SORTWORK0 и SORTWORK1),  кото-
 
   рые помещаются в каталог SYS$SCRATCH. Обычно  не  требуется
 
 
 
                            - 41 -
 
                         00152-01 33 06
 
 
   использование более одного  рабочего  файла.  Однако,  если
 
   имеющиеся диски слишком малы или слишком сильно  заполнены,
 
   можно увеличить число рабочих файлов на любое число от 1 до
 
   10-ти (при этом размер каждого рабочего файла соответствен-
 
   но уменьшается).
 
 
        Пример.
 
 
       $ ASSIGN DRA5: SORTWORK0
 
       $ ASSIGN DB0: SORTWORK1
 
       $ ASSIGN DB1: SORTWORK2
 
       $ SORT/KEY=(POS:1,SI:80)/WORK_FILES=3 -
 
       _$ STATS1,STATS2,STATS3,STATS4 SUMMARY.LIS
 
 
        Так как входные файлы  в  данной  операции  сортировки
 
   являются большими файлами, определение трех рабочих  файлов
 
   повышает эффективность операции сортировки.
 
 
 
        3.2. Квалификатор входного файла
 
 
 
        В данном подразделе описывается квалификатор  входного
 
   файла. Этот квалификатор должен приводиться непосредственно
 
   после  спецификации  входного   файла.   Это   квалификатор
 
   /FORMAT.
 
 
        Он позволяет  пользователю  определить  характеристики
 
   входного файла: определять или отвергать размер записи  или
 
   файла.
 
 
        Формат:
 
 
        Спецификация-входного-файла/FORMAT=(тип[,...])
 
 
 
 
                            - 42 -
 
                         00152-01 33 06
 
 
   где тип - параметр  квалификатора,  который  может  принять
 
   значения:
 
 
        1) RECORD_SIZE:N - определяет наибольшую длину  записи
 
   (LRL) файла в байтах.
 
 
        Допустимая максимальная длина записи зависит от  орга-
 
   низации файла:
 
 
        - 32767 для последовательного файла;
 
 
        - 16383 для относительного файла;
 
 
        - 16362 для индексно-последовательного файла.
 
 
        Указанные  величины  включают  управляющие  байты  для
 
   переменных записей  с  фиксированной  управляющей  областью
 
   (формат VFC);
 
 
        2) FILE_SIZE:N - определяет размер  входного  файла  в
 
   блоках.  Максимально  допустимый  размер  файла  составляет
 
   4294967295 блоков.
 
 
        Программа SORT получает наибольшую длину записи  (LRL)
 
   и размер файла от системы управления  данными (см. документ
 
   [6]). Если пользователь знает, что таким  образом  получена
 
   величина LRL входного файла (или файлов) неправильна, то он
 
   может отвергнуть эту  величину  путем  определения  размера
 
   записи с помощью параметра квалификатора  RECORD_SIZE.  При
 
   нескольких входных файлах величина  LRL  определяет  размер
 
   самой длинной записи во всех этих файлах.
 
 
        Величина LRL может быть определена с  помощью  команды
 
   ANALYZE/RMS_FILE, которая описана в документе [1].
 
 
 
                            - 43 -
 
                         00152-01 33 06
 
 
        Программа SORT использует информацию относительно раз-
 
   мера входного файла  для  определения  необходимого  об'ема
 
   памяти, а также размера рабочих файлов для операции  сорти-
 
   ровки. Если размер файла неизвестен (например,  при  сорти-
 
   ровке файлов, находящихся не на диске или не на стандартной
 
   ANSI магнитной  ленте),  то  SORT  предполагает  достаточно
 
   большой размер файла.
 
 
        Если это определение по умолчанию слишком  велико,  то
 
   SORT заново оценивает требования к памяти и рабочим файлам;
 
   операция сортировки будет более эффективной при определении
 
   меньшего размера входного файла. Если определение по  умол-
 
   чанию слишком мало, SORT снова оценивает требования к памя-
 
   ти; таким образом, пользователю следует указать больше раз-
 
   мер входного файла при условии, что размер структуры данных
 
   сортировки не ограничен экстентом рабочего набора.
 
 
        Пример.
 
 
 
   $SORT/KEY=(POS:40,SIZ:2,DESC) -
 
   _$YRENDAVG.DAT/FORMAT=(RECORD_SIZE:41,FILE_SIZE:3) -
 
   _$DESCRAVG.LIS
 
 
        Так как входной файл YRENDAVG.DAT не  является  файлом
 
   на диске или ANSI магнитной ленте, организация файла описы-
 
   вается с помощью квалификатора /FORMAT.
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 44 -
 
                         00152-01 33 06
 
 
        3.3. Квалификаторы выходного файла
 
 
 
        В данном подпункте описываются квалификаторы выходного
 
   файла. Они должны указываться непосредственно после  специ-
 
   фикации выходного файла.
 
 
 
        3.3.1. Квалификатор /ALLOCATION
 
 
 
        Данный квалификатор используется для оптимизации.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/ALLOCATION=N
 
 
   где N - число выделяемых блоков. Допускается  использование
 
   величин в диапазоне от 1 до 4294967295.
 
 
        Программы SORT и MERGE заранее распределяют место  для
 
   выходного файла на основе об'ема входного  файла,  устраняя
 
   таким образом непроизводительные затраты времени, связанные
 
   с расширением файла при каждой записи в него новых блоков.
 
 
        Однако, если об'ем выходного файла отличается от об'е-
 
   ма входного файла (например, из-за изменения формата данных
 
   или отбрасывания части записей), то он может указать  число
 
   блоков, которые должны быть распределены для выходного фай-
 
   ла.
 
 
        Данный квалификатор необходим при использовании квали-
 
   фикатора /CONTIGUOUS.
 
 
 
 
 
 
 
 
                            - 45 -
 
                         00152-01 33 06
 
 
        Пример.
 
 
   $SORT/KEY=(POS:1,SIZE:80) STATS.DAT -
 
   _$SUMMARY.LIS/ALLOCATION=1000/CONTIGUOUS
 
 
        Данная команда SORT  обеспечивает  распределение  1000
 
   последовательных  (расположенных  непрерывно)  блоков   для
 
   выходного файла SUMMARY.LIS.
 
 
 
        3.3.2. Квалификатор /BUCKET_SIZE
 
 
 
        Данный квалификатор используется для оптимизации.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/BUCKET_SIZE=N
 
 
   где N - размер бакета в блоках.  Допускается  использование
 
   любой величины в диапазоне от 1 до 32.
 
 
        Данный квалификатор можно использовать  при  работе  с
 
   относительными и индексно-последовательными дисковыми  фай-
 
   лами для определения размера бакета (т.е. Числа  блоков  по
 
   512 байтов). Если организация выходного файла такая же, как
 
   у входного файла (или файлов), то по умолчанию  принимается
 
   величина, соответствующая размеру бакета  первого  входного
 
   файла. Если выходной файл имеет другую организацию,  то  по
 
   умолчанию принимается величина 1. В бакете может быть  мак-
 
   симально 32 блока. Более  подробная  информация  о  бакетах
 
   файлов приводится в документе [6].
 
 
 
 
 
 
 
 
                            - 46 -
 
                         00152-01 33 06
 
 
        Пример.
 
 
   $SORT/KEY=(POS:1,SIZ:80) STATS1.DAT,STATS2.DAT -
 
   _$SUMMARY.LIS/BUCKET_SIZE=16/RELATIVE
 
 
        Данная команда SORT обеспечивает создание  относитель-
 
   ного выходного  файла  SUMMARY.LIS,  который  имеет  размер
 
   бакета 16.
 
 
 
        3.3.3. Квалификатор /CONTIGUOUS
 
 
 
        Данный квалификатор используется для оптимизации.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/CONTIGUOUS
 
 
        По умолчанию программы SORT и  MERGE  не  распределяют
 
   непрерывную область  диска  для  выходного  файла.  Однако,
 
   пользователь может обеспечить запись выходного файла в пос-
 
   ледовательных дисковых  блоках  путем  определения  данного
 
   квалификатора, уменьшая таким образом  время  доступа.  При
 
   использовании данного квалификатора следует указывать также
 
   и квалификатор /ALLOCATION, так как если заранее  распреде-
 
   ленного места слишком мало, то система  управления  данными
 
   может оказаться не в состоянии распределить файл последова-
 
   тельно.
 
 
        Пример.
 
 
       $SORT/KEY=(POS:1,SIZ:80) STATS.DAT -
 
       _$SUMMARY.LIS/ALLOCATION=1000/CONTIGUOUS
 
 
 
 
 
                            - 47 -
 
                         00152-01 33 06
 
 
        Данная команда SORT  обеспечивает  распределение  1000
 
   последовательных блоков для выходного файла SUMMARY.LIS.
 
 
 
        3.3.4. Квалификатор /FORMAT
 
 
 
        Данный квалификатор определяет формат записи выходного
 
   файла, если он отличается от формата записи входного файла.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/FORMAT=(тип[,...])
 
 
   где тип - параметр  квалификатора,  который  может  принять
 
   следующие значения:
 
 
        1) FIXED:N - определение записей фиксированной длины;
 
 
        2) VARIABLE:N - определение записей переменной длины;
 
 
        3) CONTROLLED:N - определение записей переменной длины
 
   с фиксированной управляющей областью (VFC).
 
 
        В этих параметрах указывается  формат  и  максимальный
 
   размер записи (в байтах).  Максимально  допускаемый  размер
 
   записи зависит от организации файла:
 
 
        - 32767 для последовательного файла;
 
 
        - 16383 для относительного файла;
 
 
        - 16362 для индексно-последовательного файла.
 
 
        Эти размеры включают управляющие байты. Если пользова-
 
   тель не определяет максимальный размер записи, то по  умол-
 
   чанию принимается длина, достаточная для  размещения  самой
 
 
 
                            - 48 -
 
                         00152-01 33 06
 
 
   большой выходной записи;
 
 
        4) SIZE:N - данная величина определяет размер (в  бай-
 
   тах) фиксированной части записей переменной длины с  фикси-
 
   рованной управляющей областью (CONTROLLED), максимально 255
 
   байтов. Если пользователь не определяет эту величину, то по
 
   умолчанию  принимается  размер  фиксированной   управляющей
 
   области записи в первом входном файле. При определении это-
 
   го размера в качестве нуля (0), по умолчанию обеспечивается
 
   величина 2 байта.
 
 
        5) BLOCK_SIZE:N - данная  величина  определяет  размер
 
   блока выходного файла (в байтах), если этот файл  выводится
 
   на магнитную ленту. Если входной файл  является  файлом  на
 
   магнитной ленте, то размер блока выходного файла по умолча-
 
   нию устанавливается равным размеру блока входного файла.  В
 
   противном случае размер блока выходного  файла  принимается
 
   равным размеру, использованному при монтировании  магнитной
 
   ленты.
 
 
        Допустимые величины размера блока (N)  имеют  диапазон
 
   от 20 до 65532.
 
 
        Если процесс сортировки является RECORD или TAG, то по
 
   умолчанию  формат  выходной  записи  соответствует  формату
 
   записи первого входного файла. Если это ADDRESS  или  INDEX
 
   сортировка, то по умолчанию для выходной записи принимается
 
   фиксированный формат. Если входные файлы имеют разные  фор-
 
   маты записей, то программа SORT обеспечивает размер  выход-
 
   ной записи, который достаточно велик для того,  чтобы  раз-
 
   местить максимальную запись из всех входных файлов.
 
 
 
 
                            - 49 -
 
                         00152-01 33 06
 
 
        При определении формата выходной записи можно дополни-
 
   тельно указывать максимальный  размер  записи  (в  байтах).
 
   Можно определять записи фиксированной длины,  записи  пере-
 
   менной длины или записи переменной  длины  с  фиксированной
 
   управляющей областью.
 
 
        Пример.
 
 
        $SORT/KEY=(POS:1,SI:80) STATS.DAT -
 
        _$SUMMARY.LIS/FORMAT=FIXED:80
 
 
        Входной файл STATS.DAT состоит из  записей  переменной
 
   длины размером 80 байтов. Квалификатор  /FORMAT  указывает,
 
   что выходной файл SUMMARY.LIS состоит из  записей  фиксиро-
 
   ванной длины.
 
 
 
        3.3.5. Квалификатор /INDEXED_SEQUENTIAL
 
 
 
        Данный квалификатор определяет организацию файла.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/INDEXED_SEQUENTIAL
 
 
        Если организация выходного файла должна отличаться  от
 
   организации входного файла (или  файлов),  то  пользователь
 
   должен определить новую  организацию.  Данный  квалификатор
 
   следует        использовать         для         определения
 
   индексно-последовательной организации выходного файла. Кро-
 
   ме того, выходной файл должен существовать и быть пустым, а
 
   пользователь должен указать квалификатор /OVERLAY.
 
 
 
 
 
 
                            - 50 -
 
                         00152-01 33 06
 
 
        Пример.
 
 
        $CREATE/FDL=NEW.FDL AVERAGE.DAT
 
        $SORT/KEY=(POS:1,SI:80) DATA.DAT,STATS.DAT -
 
        _$AVERAGE.DAT/INDEXED_SEQUENTIAL/OVERLAY
 
 
        Команда CREATE/FDL  вызывает  создание  пустого  файла
 
   AVERAGE.DAT. Команда  SORT  указывает,  что  выходной  файл
 
   имеет индексно-последовательную организацию и  записывается
 
   в пустой файл AVERAGE.DAT.
 
 
 
        3.3.6. Квалификатор /OVERLAY
 
 
 
        Данный квалификатор указывает, что выходной файл  дол-
 
   жен быть записан в существующий пустой файл.
 
 
        Формат:
 
 
 
        Спецификация-выходного-файла/OVERLAY
 
 
        При определении индексно-последовательной  организации
 
   выходной файл должен уже существовать и быть пустым файлом.
 
   Необходимо указать, что этот пустой файл должен быть  запи-
 
   сан отсортированными записями путем использования  квалифи-
 
   катора /OVERLAY.
 
 
        Если входной файл имеет последовательную  или  относи-
 
   тельную организацию и пользователь создает пустой файл  для
 
   отсортированных записей путем  использования  обслуживающей
 
   программы  суд,  то   следует   использовать   квалификатор
 
   /OVERLAY для определения того,  что  выходной  файл  должен
 
   записываться в пустой файл.
 
 
 
                            - 51 -
 
                         00152-01 33 06
 
 
        Для создания пустого файла можно использовать  команду
 
   CREATE/FDL, которая описана в документе  [2],  и  применить
 
   квалификатор /OVERLAY для указания того, что результат сор-
 
   тировки должен записываться в этот пустой файл. Любые атри-
 
   буты, указанные  при  создании  пустого  файла,  становятся
 
   атрибутами выходного файла сортировки.
 
 
        Пример.
 
 
        $CREATE/FDL=NEW.FDL AVERAGE.DAT
 
        $SORT/KEY=(POS:1,SI:80) STATS.DAT AVERAGE/OVERLAY
 
 
        Файл FDL (NEW.FDL) определяет специальные атрибуты для
 
   файла AVERAGE.DAT. Когда  программа  SORT  записывает  свой
 
   вывод в этот файл, получаемый в  результате  выходной  файл
 
   имеет атрибуты, определяемые файлом FDL.
 
 
 
        3.3.7. Квалификатор /RELATIVE
 
 
 
        Данный квалификатор определяет, что выходной файл дол-
 
   жен иметь относительную организацию.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/RELATIVE
 
 
        Если организация выходного файла должна отличаться  от
 
   организации входного файла (или  файлов),  то  пользователь
 
   должен определить новую организацию файла.  Если  пользова-
 
   тель не определяет организацию файла,  то  по  умолчанию  в
 
   случае RECORD и TAG сортировки организация выходного  файла
 
   соответствует организации первого входного файла. Для опре-
 
   деления относительной организации выходного  файла  следует
 
 
                            - 52 -
 
                         00152-01 33 06
 
 
   использовать квалификатор /RELATIVE.
 
 
        Пример.
 
 
   $SORT/KEY=(POS:1,SIZ:80) STATS.DAT SUMMARY.LIS/RELATIVE
 
 
        Так как входной файл STATS.DAT не является относитель-
 
   ным файлом, а выходной файл SUMMARY.LIS должен быть относи-
 
   тельным,  квалификатор  /RELATIVE  определяет   организацию
 
   выходного файла в качестве относительной.
 
 
 
        3.3.8. Квалификатор /SEQUENTIAL
 
 
 
        Данный квалификатор определяет, что выходной файл дол-
 
   жен иметь последовательную организацию.
 
 
        Формат:
 
 
        Спецификация-выходного-файла/SEQUENTIAL
 
 
        Если организация выходного файла должна отличаться  от
 
   организации входного файла (или  файлов),  то  пользователь
 
   должен определить новую организацию. Если  пользователь  не
 
   определяет организацию файла, то по умолчанию при RECORD  и
 
   TAG сортировке  принимается  организация  выходного  файла,
 
   соответствующая организации первого из входных файлов. Если
 
   пользователь не определяет организацию файла, то по умолча-
 
   нию в случае ADDRESS или INDEX сортировки принимается  пос-
 
   ледовательная организация выходного файла.
 
 
        Когда по  умолчанию  не  принимается  последовательная
 
   организация файла, а пользователю требуется, чтобы выходной
 
   файл имел  последовательный  формат,  следует  использовать
 
 
 
                            - 53 -
 
                         00152-01 33 06
 
 
   квалификатор /SEQUENTIAL.
 
 
        Пример.
 
 
   $SORT/KEY=(POS:1,SIZ:80) STATS.DAT SUMMARY.LIS/SEQUENTIAL
 
 
        Так как входной файл STATS.DAT не является  последова-
 
   тельным файлом, а выходной файл должен иметь последователь-
 
   ный формат, для  определения  выходного  файла  SUMMARY.LIS
 
   используется квалификатор /SEQUENTIAL.
 
 
 
        3.4. Квалификаторы файла спецификаций
 
 
 
        В данном подразделе описываются квалификаторы, которые
 
   можно использовать в файле спецификаций.
 
 
 
        3.4.1. Квалификатор /CDD_PATH_NAME
 
 
 
        Данный квалификатор обеспечивает возможность использо-
 
   вания определений записи централизованного  словаря  данных
 
   (CDD).
 
 
        Формат:
 
 
        /CDD_PATH_NAME="CDD-имя-пути"
 
 
   где CDD-имя-пути - указывает определение записи CDD.
 
 
        Квалификатор /CDD_PATH_NAME можно использовать  только
 
   в том случае, если в  системе  установлен  централизованный
 
   словарь данных (CDD). Этот квалификатор  указывает  опреде-
 
   ляемые словарем поля и атрибуты  для  сортировки.  Величина
 
   параметра "CDD-имя-пути"  указывает  определение  записи  в
 
 
 
                            - 54 -
 
                         00152-01 33 06
 
 
   пределах централизованного словаря данных. Определение этих
 
   полей с данным квалификатором аналогично тому, как эти поля
 
   определяются  с  квалификатором   /FIELD,   приведенным   в
 
   п.3.4.6. Квалификатор /CDD_PATH_NAME может быть использован
 
   вместо или совместно с квалификатором /FIELD.  После  того,
 
   как поля определены, они могут быть использованы  в  после-
 
   дующих квалификаторах спецификаций файла, таких  как  /KEY,
 
   /CONDITION, /INCLUDE или /OMIT, приведенных  соответственно
 
   в пп. 3.4.8, 3.4.4, 3.4.7 и 3.4.9.
 
 
        Пример.
 
 
        /CDD_PATH_NAME="пользователь"
 
 
        Данный квалификатор идентифицирует  запись  "пользова-
 
   тель", которая была ранее идентифицирована в централизован-
 
   ном словаре данных СЛОВАРЬ-32.
 
 
 
        3.4.2. Квалификатор /CHECK_SEQUENCE
 
 
 
        Данный квалификатор определяет,  должна  ли  программа
 
   слияния проверять последовательность входных записей.
 
 
        Формат:
 
 
        /[NO]CHECK_SEQUENCE
 
 
        По умолчанию программа MERGE проверяет  последователь-
 
   ность записей во входном файле (или файлах). При  необходи-
 
   мости отмены этой установки по умолчанию следует  использо-
 
   вать данный квалификатор в тексте файла спецификаций.
 
 
 
 
 
 
                            - 55 -
 
                         00152-01 33 06
 
 
        Пример.
 
 
        /NOCHECK_SEQUENCE
 
 
        Данное указание приводит к тому, что  программа  MERGE
 
   не выполняет проверку последовательности записей.
 
 
 
        3.4.3. Квалификатор /COLLATING_SEQUENCE
 
 
 
        Данный квалификатор определяет одну  из  установленных
 
   последовательностей сортировки или определенную пользовате-
 
   лем последовательность для символов поля  ключа  (или  клю-
 
   чей). Это позволяет пользователю  модифицировать  любую  из
 
   установленных  последовательностей  сортировки  или   любые
 
   ранее определенные пользователем последовательности.
 
 
        Формат:
 
 
      /COLLATING_SEQUENCE=
 
      (SEQUENCE=тип_последовательности
 
      [,MODIFICATION=(символ оператор символ)]
 
      [,IGNORE=символ или диапазон-символов,...]
 
      [,FOLD]
 
      [,[NO]TIE_BREAK])
 
 
        В данном квалификаторе могут быть указаны параметры:
 
 
        1) SEQUENCE=тип_последовательности
 
 
   где тип_последовательности может  принять  значения  ASCII,
 
   EBCDIC или может быть последовательностью символов, опреде-
 
   ленной пользователем.
 
 
 
 
 
                            - 56 -
 
                         00152-01 33 06
 
 
        ASCII - определение последовательности сортировки кода
 
   ASCII, которая является последовательностью по умолчанию.
 
 
        EBCDIC - организация символов в соответствии с  после-
 
   довательностью кода EBCDIC. Символы остаются в  представле-
 
   нии кода ASCII; меняется только порядок.
 
 
        Пользователь может определить  собственную  последова-
 
   тельность путем указания цепочки одинарных или двойных сим-
 
   волов или диапазонов одинарных символов. (двойным  символом
 
   называется любая последовательность из двух отдельных  сим-
 
   волов, которая интерпретируется как один символ.  Например,
 
   символы "CH" могут быть  определены  для  упорядочения  как
 
   символ "C"). Такая цепочка должна быть заключена в  круглые
 
   скобки.
 
 
        Можно также представлять символы  соответствующими  им
 
   восьмеричными, десятичными или шестнадцатеричными величина-
 
   ми, используя соответсвующие знаки оснований %O, %D или %X.
 
 
        При определении последовательности упорядочения  необ-
 
   ходимо соблюдать следующие правила:
 
 
        - заключить символы в кавычки;
 
 
        - разделить каждый символ и диапазон символов  запяты-
 
   ми, а весь список заключить в круглые скобки;
 
 
        - присвоить всем  символам,  приводимым  в  символьных
 
   ключах в операции сортировки или слияния, величины порядка.
 
   Любой символ, которому не присвоена величина порядка, игно-
 
   рируется (если только не определены  возможности  FOLD  или
 
   MODIFICATION);
 
 
 
                            - 57 -
 
                         00152-01 33 06
 
 
        - не следует определять символ более одного раза;
 
 
        - не следует определять нулевой символ путем использо-
 
   вания кавычек (""). Вместо этого следует использовать  знак
 
   основания, например %X0;
 
 
        - кавычки следует указывать путем заключения их в дру-
 
   гие кавычки ("""") или путем использования знака основания;
 
 
        2) MODIFICATION=(символ оператор символ) - использует-
 
   ся для изменения последовательности сортировки, указанной в
 
   параметре SEQUENCE. Можно модифицировать последовательности
 
   ASCII, EBCDIC или определенную пользователем последователь-
 
   ность. Модифицируемая последовательность должна быть  опре-
 
   делена в параметре SEQUENCE, даже если она является  после-
 
   довательностью по умолчанию.
 
 
        Значение "символ" в параметре MODIFICATION  определяет
 
   символ в  последовательности  упорядочения,  одинарный  или
 
   двойной символ. Двойной  символ  представляет  собой  любую
 
   последовательность из двух одинарных символов, которые сор-
 
   тируются (упорядочиваются) как один символ. Символ  следует
 
   заключить в кавычки.
 
 
        Значение "оператор" определяет операцию,  используемую
 
   при сравнении символов. Можно указывать знаки  больше  (>),
 
   меньше (<) или равно (=).
 
 
        В параметре MODIFICATION могут быть указаны  следующие
 
   типы изменений:
 
 
        - одинарный или двойной символ может быть приравнен  к
 
   одинарному символу, которому уже присвоена величина  упоря-
 
 
 
                            - 58 -
 
                         00152-01 33 06
 
 
   дочения;
 
 
        - одинарный или  двойной  символ  может  сортироваться
 
   (приводиться) после одинарного символа, которому уже  прис-
 
   воена величина упорядочения ("CH">"C");
 
 
        - одинарный или двойной символ может сортироваться  до
 
   одинарного символа, которому уже присвоена величина  упоря-
 
   дочения ("D"<"A");
 
 
        - двойной символ может быть приравнен к ранее  опреде-
 
   ленному двойному символу ("CH"="SH");
 
 
        - одинарный символ может быть приравнен последователь-
 
   ности из двух символов ("C"="CH");
 
 
        3) IGNORE=символ или диапазон-символов -  используется
 
   для определения того, что программа SORT или  MERGE  должна
 
   игнорировать символ или диапазон символов в  последователь-
 
   ности упорядочения при выполнении исходного сравнения. Сле-
 
   дует отметить, что при использовании разбиения или разделе-
 
   ния связей расматривается символ (или символы),  определен-
 
   ный в параметре IGNORE. Разбиение связи  происходит  тогда,
 
   когда сравниваются две или более цепочек как равные и опре-
 
   делен параметр TIE_BREAK;
 
 
        4) FOLD определяет, что всем буквам  нижнего  регистра
 
   присваиваются величины их эквивалентов в верхнем  регистре.
 
   Буквами нижнего регистра являются прописные буквы;
 
 
        5) [NO]TIE_BREAK определяет, должна ли программа  SORT
 
   или MERGE  использовать  числовые  величины  для  разбиения
 
   (разделения) связей между символами, которые имеют  эквива-
 
 
 
                            - 59 -
 
                         00152-01 33 06
 
 
   лентные значения. Определение параметра NOTIE_BREAK  отвер-
 
   гает эту установку по умолчанию и обеспечивает,  что  после
 
   исходного сравнения никаких дальнейших сравнений не  выпол-
 
   няется.
 
 
        Квалификатор TIE_BREAK должен  указываться  для  того,
 
   чтобы  происходило  разделение  связей.  TIE_BREAK   должен
 
   использоваться при указании FOLD или MODIFICATION для  этих
 
   последовательностей.
 
 
        Квалификатор /COLLATING_SEQUENCE определяет инструкции
 
   упорядочения для операции сортировки или слияния. Пользова-
 
   тель может определить последовательность  ASCII  (установка
 
   по умолчанию), EBCDIC или собственную последовательность.
 
 
        Кроме того, параметры  MODIFICATION,  IGNORE,  FOLD  и
 
   [NO]TIE_BREAK данного квалификатора могут быть использованы
 
   для модифицирования любой из этих последовательностей. Мож-
 
   но выполнить  более  одной  модификации  последовательности
 
   упорядочения.
 
 
        Так как параметры FOLD, MODIFICATION и IGNORE  обраба-
 
   тываются в порядке  их  приведения  пользователем,  следует
 
   уделять особое внимание порядку этих указаний при их  опре-
 
   делении. Обычно параметр FOLD следует приводить после  всех
 
   параметров MODIFICATION и IGNORE для обеспечения того, что-
 
   бы действие этих возможностей распространялось  на  символы
 
   верхнего и нижнего регистров. Можно потребовать игнорирова-
 
   ния символа или диапазона символов в пределах данной после-
 
   довательности упорядочения  путем  использования  параметра
 
   IGNORE.
 
 
 
 
                            - 60 -
 
                         00152-01 33 06
 
 
        Примеры:
 
        1. /COLLATING_SEQUENCE=(SEQUENCE=ASCII,
 
            IGNORE=("-"," "))
 
 
        Данный квалификатор с  параметром  IGNORE  приводит  к
 
   тому, что как равные до разделения связей принимаются поля:
 
          - 252-3412;
 
          - 252 3412;
 
          - 2523412.
 
 
      2. /COLLATING_SEQUENCE=(SEQUENCE=("A"-"L","LL","M"-"R",
 
         "RR","S"-"Z"))
 
 
        Данное указание определяет последовательность, в кото-
 
   рой двойной символ LL упорядочивается как одинарный  символ
 
   между L и M, а двойной символ RR упорядочивается  как  один
 
   символ между R и S. В противном случае эти двойные  символы
 
   приводились бы в их обычном алфавитном порядке. По  умолча-
 
   нию определяемая пользователем последовательность не  опре-
 
   деляет никаких других символов (имеется в виду  приведенная
 
   в данном примере последовательность), например, букв нижне-
 
   го регистра.
 
 
       3. /COLLATING_SEQUENCE=(SEQUENCE=
 
          ("AN","EB","AR","PR","AY","UN","UL",
 
           "UG","EP","CT","OV","EC","0"-"9"),
 
           MODIFICATION=("'"="19"),
 
           FOLD)
 
 
        Квалификатор /COLLATING_SEQUENCE определяет последова-
 
   тельность упорядочения, которая позволяет упорядочить  файл
 
   SEMINAR.DAT, приведенный на рис.6, в соответствии  с  датой
 
 
 
                            - 61 -
 
                         00152-01 33 06
 
 
   проведения семинаров.
 
 
 
           Файл SEMINAR.DAT
 
        16 NOV 1983 искусство общения
        11 JAN '84  как быть самоуверенным
        12 OCT 1983 улучшение производительности
        15 MAR 1984 проблемы подростков
        07 DEC '83  стресы - причины и как их избежать
        14 SEP 1983 управление временем
 
                             рис. 6
 
 
        Первичным ключем является поле года, вторичным -  поле
 
   месяца. Так как поле месяца не является числовым, но  необ-
 
   ходимо организовать месяцы в хронологическом порядке, поль-
 
   зователь должен определить  собственную  последовательность
 
   упорядочения. Можно решить эту задачу путем сортировки двух
 
   последних букв каждого месяца (в их хронологической  после-
 
   довательности), присваивая каждому месяцу однозначную вели-
 
   чину ключа.
 
 
        Параметр MODIFICATION  определяет,  что  апостроф  (')
 
   должен приравниваться к 19-ти,  обеспечивая  таким  образом
 
   сравнение '83 и 1984. Параметр FOLD  указывает,  что  буквы
 
   верхнего и нижнего регистра должны рассматриваться как оди-
 
   наковые.
 
 
        На рис.7 приводится выходной файл, являющийся  резуль-
 
   татом данной операции сортировки.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 62 -
 
                         00152-01 33 06
 
 
          файл SEMINAR.DAT после сортировки
 
        14 SEP 1983 управление временем
        12 OCT 1983 улучшение производительности
        16 NOV 1983 искусство общения
        07 DEC '83  стресы - причины и как их избежать
        11 JAN '84  как быть самоуверенным
        15 MAR 1984 проблемы подростков
 
                             рис. 7
 
 
 
        3.4.4. Квалификатор /CONDITION
 
 
 
        Данный квалификатор определяет условия обработки ключа
 
   и данных, а также выбора записи.
 
 
      Формат:
 
      /CONDITION=
 
      (NAME=имя-условия,
 
      TEST=(имя-поля оператор условие-проверки
 
      [логический-оператор...]))
 
 
   в данном квалификаторе могут быть указаны параметры:
 
 
        1) NAME=имя-условия - определение имени условия, кото-
 
   рое проверяется. Это имя условия может быть использовано  в
 
   квалификаторах /KEY, /DATA,  /OMIT  и  /INCLUDE  после  его
 
   определения в квалификаторе /CONDITION.
 
 
        2) TEST=(имя-поля оператор условие-проверки)
 
 
   где имя-поля - определяет имя проверяемого  поля.  Это  имя
 
   поля должно быть ранее определено в квалификаторе /FIELD;
 
 
        Оператор - логический оператор или оператор отношения,
 
   используемый в проверке условия. Могут использоваться логи-
 
   ческие операторы AND (и) и OR (или) и операторы  отношения,
 
 
 
                            - 63 -
 
                         00152-01 33 06
 
 
   перечисленные в таблице.
 
 
 
                    Операторы отношения
   ----------------------------------------------------
      оператор    !             значение
   ----------------------------------------------------
        EQ        !                  равно
        NE        !                  не равно
        GT        !                  больше
        GE        !                  больше или равно
        LT        !                  меньше
        LE        !                  меньше или равно
 
 
        Условие-проверки - константа или имя поля, относитель-
 
   но которого выполняется  проверка.  Константа  определяется
 
   путем использования следующего синтаксиса:
 
 
        - %Dдесятичные_цифры;
 
        - %Oвосьмеричные_цифры;
 
        - %Xшестнадцатеричные_цифры;
 
        - "символ".
 
 
        Файл спецификаций может быть использован для изменения
 
   относительного порядка записей или содержимого определенных
 
   полей записи.  Сначала  следует  использовать  квалификатор
 
   /CONDITION для определения проверки  условия.  После  этого
 
   можно использовать такую же проверку в  квалификаторе  /KEY
 
   или /DATA для изменения порядка записей или в квалификаторе
 
   /OMIT или /INCLUDE для изменения содержимого записи.
 
 
        При необходимости изменения порядка записей в выходном
 
   файле сначала следует определить имя условия в квалификато-
 
   ре /CONDITION, а затем установить проверку для соответствия
 
   этому условию. После этого следует определить относительный
 
   порядок в квалификаторе /KEY в форме:
 
 
 
 
 
                            - 64 -
 
                         00152-01 33 06
 
 
        /KEY=(IF имя-условия THEN значение ELSE значение)
 
 
        Квалификатор  /CONDITION  позволяет   также   изменять
 
   содержимое поля в выходных записях. Сначала следует опреде-
 
   лить имя условия, а затем организовать  проверку  на  соот-
 
   ветствие этому условию. Требуемое содержимое  поля  опреде-
 
   ляется в квалификаторе /DATA:
 
 
        /DATA=(IF имя-условия THEN "новое-содержимое" ELSE
 
        "новое-содержимое")
 
 
 
        Примеры:
 
 
          1. /FIELD=(NAME=AGENT,POSITION:20,SIZE:15)
 
             /CONDITION=(NAME=AGENCY,
 
                         TEST=(AGENT EQ "REAL-T TRUST"
 
                         OR
 
                         AGENT EQ "REALTY TRUST"))
 
             /DATA=(IF AGENCY THEN "REALTY TRUST" ELSE AGENT)
 
 
        В данном примере выполняется сортировка двух файлов. В
 
   одном файле использовано значение REAL-T TRUST, а в  другом
 
   - значение REALTY TRUST. Квалификаторы /CONDITION  и  /DATA
 
   сообщают программе  SORT  о  необходимости  приводить  поле
 
   AGENT в  отсортированном  выходном  файле  в  форме  REALTY
 
   TRUST.
 
 
         2. /FIELD=(NAME=ZIP,POSITION:60,SIZE:6)
 
            /CONDITION=(NAME=LOCATION,
 
                        TEST=(ZIP EQ "01863"))
 
            /KEY=(IF LOCATION THEN 1
 
                  ELSE 2)
 
 
 
                            - 65 -
 
                         00152-01 33 06
 
 
        В данном примере все записи с почтовым индексом  01863
 
   будут приводиться в начале отсортированного выходного  фай-
 
   ла. Проверка условия выполняется на поле ZIP,  определенном
 
   в квалификаторе /FIELD; соответствующему условию  присвоено
 
   имя LOCATION. Величины 1 и 2 в квалификаторе  /KEY  опреде-
 
   ляют относительный порядок тех записей.
 
 
         3. /FIELD=(NAME=ZIP,POSITION:60,SIZE:6)
 
            /CONDITION=(NAME=LOCATION,
 
                        TEST=(ZIP EQ "01863"))
 
            /DATA=(IF LOCATION THEN "NORTH CHELMSFORD"
 
                   ELSE "OUTSIDE DISTRICT")
 
 
        В данном примере квалификатор /CONDITION  обеспечивает
 
   проверку на почтовый индекс 01863. Квалификатор /DATA опре-
 
   деляет, что дополнительная информация будет  добавляться  к
 
   выходной записи в зависимости от результатов проверки.
 
 
 
        3.4.5. Квалификатор /DATA
 
 
 
        Данный квалификатор определяет  поля  записи,  которые
 
   должны быть направлены в выходной файл.
 
 
        Формат:
 
 
        /DATA=имя-поля
 
        /DATA=(IF имя-условия THEN "новое-содержимое"
 
              ELSE "новое-содержимое")
 
 
   где имя-поля - определение имени поля в записи.  Соответст-
 
   вующее имя поля должно  быть  предварительно  определено  в
 
   /FIELD;
 
 
 
                            - 66 -
 
                         00152-01 33 06
 
 
        Имя-условия - определение имени условия, которое пред-
 
   варительно должно быть указано в квалификаторе /CONDITION;
 
 
        Новое-содержимое - определение изменения записи. Новое
 
   содержимое может быть константой или именем  поля,  которое
 
   было определено в квалификаторе /FIELD.
 
 
        Квалификаторы /DATA должны определить поля в  выходных
 
   записях, которые  направляются  в  выходной  файл.  Следует
 
   определять поля данных в том порядке, в котором они  должны
 
   приводиться в выходной записи. По умолчанию  формат  записи
 
   выходного файла соответствует  формату  записи  во  входном
 
   файле. При необходимости устранения или  изменения  порядка
 
   полей в выходной записи можно использовать /DATA. В  выход-
 
   ной файл будут направляться только те поля, которые опреде-
 
   лены в этих квалификаторах.
 
 
        Можно условно,  т.е. в  соответствии  с  определенным
 
   условием, изменять содержимое поля в выходных записях путем
 
   указания имени условия, а затем установки проверки на соот-
 
   ветствие этому условию с помощью квалификатора  /CONDITION.
 
   После этого определяется содержимое поля с помощью квалифи-
 
   катора /DATA.
 
 
        Формат:
 
 
      /DATA=(IF имя-условия THEN "новое-содержимое"
 
             ELSE "новое-содержимое")
 
 
        Примеры:
 
 
     1. /FIELD=(NAME=AGENT,POSITION:1,SIZE:5)
 
        /FIELD=(NAME=ZIP,POSITION:6,SIZE:3)
 
 
 
                            - 67 -
 
                         00152-01 33 06
 
 
        /FIELD=(NAME=STYLE,POSITION:10,SIZE:5)
 
        /FIELD=(NAME=CONDITION,POSITION:16,SIZE:9)
 
        /FIELD=(NAME=PRICE,POSITION:26,SIZE:5)
 
        /FIELD=(NAME=TAXES,POSITION:32,SIZE:5)
 
        /DATA=PRICE
 
        /DATA="  "
 
        /DATA=TAXES
 
        /DATA="  "
 
        /DATA=STYLE
 
        /DATA="  "
 
        /DATA=ZIP
 
        /DATA="  "
 
        /DATA=AGENT
 
 
        Квалификаторы /FIELD  определяют  поля  в  записях  из
 
   входного файла, который имеет следующий формат:
 
 
           AGENT ZIP STYLE CONDITION PRICE TAXES
 
 
        Квалификаторы /DATA, которые используют  имена  полей,
 
   определенных в квалификаторах /FIELD, изменяют формат запи-
 
   сей для создания выходных записей в формате:
 
 
        PRICE TAXES STYLE ZIP AGENT
 
 
     2. /FIELD=(NAME=AGENT,POSITION:20,SIZE:15)
 
        /CONDITION=(NAME=AGENCY,
 
                    TEST=(AGENT EQ "REAL-T TRUST"
 
                    OR
 
                    AGENT EQ "REALTY TRUST"))
 
        /DATA=(IF AGENCY THEN "REALTY TRUST" ELSE AGENT)
 
 
 
 
 
                            - 68 -
 
                         00152-01 33 06
 
 
        В данном примере выполняется сортировка двух файлов. В
 
   одном файле использовано значение REAL-T  TRUST,  в  другом
 
   значение REALTY TRUST.  Квалификаторы  /CONDITION  и  /DATA
 
   сообщают программе  SORT  о  необходимости  приводить  поле
 
   AGENT в отсортированном выходном  файле  в  формате  REALTY
 
   TRUST.
 
 
 
        3.4.6. Квалификатор /FIELD
 
 
 
        Данный квалификатор обеспечивает определение полей  во
 
   входном файле (или файлах).
 
 
        Формат:
 
 
        /FIELD=(NAME=имя-поля,POSITION:N,SIZE:N,
 
               [DIGITS:N,]тип-данных)
 
 
   где NAME=имя-поля - определение имени  поля.  Имя  поля  не
 
   может иметь вложенных пробелов, должно начинаться  с  алфа-
 
   витного символа и не может быть длинее 31-го символа;
 
 
        POSITION:N - определение позиции поля в записи;
 
 
        SIZE:N - определение размера поля, содержащего символы
 
   или двоичные данные. В  файле  спецификаций  размер  (SIZE)
 
   предполагает длину в байтах.  Приемлемые  величины  опреде-
 
   ляются типом данных:
 
 
        - не более 32767 символов для символьных данных;
 
 
        - 1, 2, 4, 8 или 16 байт для двоичных данных;
 
 
        - не надо указывать размер для данных с плавающей точ-
 
   кой;
 
 
                            - 69 -
 
                         00152-01 33 06
 
 
        DIGITS:N - определение размера поля, содержащего деся-
 
   тичные данные. Размер поля, в котором содержатся десятичные
 
   данные, не должен превышать  31  цифру.  Величина  DIGITS:N
 
   используется только при описании поля, содержащего десятич-
 
   ные данные;
 
 
        Тип-данных - определение типа данных поля. Если  типом
 
   данных являются символы, то определение типа данных не тре-
 
   буется. Символьный тип предполагается по  умолчанию.  Прог-
 
   раммами SORT и MERGE распознаются следующие типы данных:
 
 
      - CHARACTER;
 
      - BINARY[,SIGNED];
 
      - BINARY,UNSIGNED;
 
      - D_FLOATING ;
 
      - F_FLOATING ;
 
      - G_FLOATING ;
 
      - H_FLOATING ;
 
      - ZONED;
 
      - DECIMAL[,SIGNED,TRAILING_SIGN,OVERPUNCHED_SIGN];
 
      - DECIMAL,LEADING_SIGN,SEPARATE_SIGN[,SIGNED];
 
      - DECIMAL,LEADING_SIGN,[OVERPUNCHED_SIGN,SIGNED] ;
 
      - DECIMAL,[TRAILING_SIGN],SEPARATE_SIGN[,SIGNED] ;
 
      - DECIMAL,UNSIGNED ;
 
      - PACKED_DECIMAL .
 
 
        При изменении порядка  или  формата  выходных  записей
 
   пользователь должен определить каждое  поле  этих  записей.
 
   Такие поля включают поля ключа, поля для сравнения и  поля,
 
   направляемые в выходной файл. Пользователь определяет  каж-
 
   дое поле путем определения имени, позиции, размера  и  типа
 
 
 
                            - 70 -
 
                         00152-01 33 06
 
 
   данных в квалификаторе /FIELD.
 
 
        Когда имя-поля определено в квалификаторе /FIELD,  его
 
   можно использовать  в  квалификаторах  /CONDITION,  /KEY  и
 
   /DATA.
 
 
        Пример.
 
 
      /FIELD=(NAME=SALARY,POSITION:10,DIGITS:8,DECIMAL)
 
 
        Квалификатор /FIELD определяет поле в записи с  именем
 
   SALARY, указывая, что оно начинается в 10-й позиции записи,
 
   состоит из 8-ми цифр и содержит десятичные данные.
 
 
 
        3.4.7. Квалификатор /INCLUDE
 
 
 
        Данный квалификатор определяет выбор записи,  а  также
 
   используется в случае нескольких форматов записей.
 
 
        Формат:
 
 
      /INCLUDE=(CONDITION=имя-условия
 
                  [,KEY=...][,DATA=...])
 
 
   где CONDITION=имя-условия  -  относится  к  имени  условия,
 
   определенном в предыдущем квалификаторе /CONDITION;
 
 
        KEY=... - определяет поле ключа, так как тип записи по
 
   умолчанию, определенный в квалификаторе  /KEY,  не  исполь-
 
   зуется;
 
 
        DATA=... - определяет поле данных, так как тип  записи
 
   по  умолчанию,  определенный  в  квалификаторе  /DATA,   не
 
   используется.
 
 
 
                            - 71 -
 
                         00152-01 33 06
 
 
        Пользователь может указывать, что данные должны услов-
 
   но (т.е. при наличии определенного  условия)  включаться  в
 
   выходной файл. После определения условия с помощью квалифи-
 
   катора /CONDITION, пользователь определяет выбор  записи  с
 
   помощью квалификатора /INCLUDE, где  указывается,  чтобы  в
 
   выходной  файл  включались  записи,  удовлетворяющие  этому
 
   условию.
 
 
        В файле спецификаций можно определять несколько квали-
 
   фикаторов /INCLUDE и /OMIT. Порядок, в котором  они  указы-
 
   ваются, определяет тот порядок, в  котором  входные  записи
 
   проверяются для включения. После  последнего  квалификатора
 
   /INCLUDE все записи, которые еще не включены или явно  опу-
 
   щены (удалены), будут опускаться (т.е. не будут  включаться
 
   в выходной файл).
 
 
        Путем определения квалификатора /INCLUDE без  условия,
 
   можно включать любые записи, которые не были ранее  опущены
 
   или включены.
 
 
        При сортировке нескольких форматов записей один квали-
 
   фикатор /INCLUDE должен быть определен  для  каждой  записи
 
   разного формата (в сортируемых записях). Если  пользователь
 
   не определяет  возможность  KEY  в  пределах  квалификатора
 
   INCLUDE, то SORT принимает определения ключа по  умолчанию.
 
   Если статья KEY определяется в квалификаторе  /INCLUDE,  то
 
   определение ключа по  умолчанию  не  используется.  Порядок
 
   поля или полей KEY в квалификаторе /INCLUDE определяет соз-
 
   дание внутреннего ключа для сортировки. Порядок  поля  (или
 
   полей) DATA в квалификаторе /INCLUDE определяет способ фор-
 
   матирования выходной записи.
 
 
 
                            - 72 -
 
                         00152-01 33 06
 
 
        Пример сортировки записей с двумя различными форматами
 
   приводится в п. 3.4.14.
 
 
        Пример.
 
 
      /FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
 
      /CONDITION=(NAME=LOCATION,
 
                 TEST=(ZIP EQ "01863"))
 
      /INCLUDE=(CONDITION=LOCATION)
 
 
        Данные квалификаторы /CONDITION и /INCLUDE определяют,
 
   что записи с почтовым индексом (ZIP) 01863 будут включаться
 
   в выходной файл.
 
 
 
        3.4.8. Квалификатор /KEY
 
 
 
        Данный квалификатор определяет поле (или поля) ключа.
 
 
        Формат:
 
 
      /KEY=имя-поля
 
      /KEY=(имя-поля,порядок)
 
      /KEY=([IF имя-условия THEN значение ELSE]... Значение
 
           [,порядок])
 
 
   где имя-поля - определение имени поля ключа. Это  имя  поля
 
   было ранее определено в квалификаторе /FIELD;
 
 
        Порядок -  определение  порядка  сортировки.  Значение
 
   ASCENDING определяет возрастающий порядок для операции сор-
 
   тировки или слияния. Данный вариант принимается по  умолча-
 
   нию. Значение DESCENDING определяет убывающий  порядок  для
 
   операции сортировки или слияния;
 
 
 
                            - 73 -
 
                         00152-01 33 06
 
 
        Значение - определение  ключа.  Такая  величина  может
 
   быть константой или именем поля, которое было определено  в
 
   квалификаторе /FIELD.
 
 
        При сортировке целых записей с использованием символь-
 
   ных данных (т.е. символов) определение поля ключа  не  тре-
 
   буется. В противном случае следует определять  квалификатор
 
   /KEY для каждого  ключа  в  порядке  их  приоритета.  Можно
 
   выполнять сортировку с  использованием  максимально  255-ти
 
   полей ключа. Существуют три способа использования  указания
 
   /KEY. Во-первых, можно использовать квалификатор /KEY прос-
 
   то для  определения  имени  поля  ключа.  Во-вторых,  можно
 
   использовать квалификатор /KEY для определения  имени  поля
 
   ключа и для указания порядка сортировки. В этом случае сле-
 
   дует заключить имя-ключа и  порядок  сортировки  в  круглые
 
   скобки.
 
 
        В-третьих, можно использовать  квалификатор  /KEY  для
 
   изменения порядка записей в выходном файле. Сначала следует
 
   определить имя условия в квалификаторе /CONDITION, а  затем
 
   организовать проверку на соответствие этому условию.  После
 
   этого определяется относительный порядок записей в квалифи-
 
   каторе /KEY:
 
 
      /KEY=(IF имя-условия THEN значение ELSE значение)
 
 
        Примеры:
 
 
      1. /FIELD=(NAME=SALARY,POSITION:10,DIGITS:8,DECIMAL)
 
         /KEY=(SALARY,DESCENDING)
 
 
        Данный квалификатор /KEY определяет, что  полем  ключа
 
   является SALARY и что сортировка  выполняется  в  убывающем
 
 
                            - 74 -
 
                         00152-01 33 06
 
 
   порядке.
 
 
      2. /FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
 
         /CONDITION=(NAME=LOCATION,
 
                     TEST=(ZIP EQ "01863"))
 
         /KEY=(IF LOCATION THEN 1
 
               ELSE 2)
 
 
        В данном примере все  записи  со  значением  поля  ZIP
 
   01863 приводятся в начале отсортированного выходного файла.
 
   Проверка условия LOCATION  (определенного  в  квалификаторе
 
   /CONDITION) выполняется по полю ZIP (ему  присвоено  имя  в
 
   квалификаторе /FIELD). Величины 1 и 2 в данном квалификато-
 
   ре /KEY определяют относительный порядок тех записей, кото-
 
   рые удовлетворяют этому условию и тех, которые не  удовлет-
 
   воряют ему.
 
 
 
        3.4.9. Квалификатор /OMIT
 
 
 
        Данный квалификатор определяет выбор записи,  а  также
 
   используется при нескольких форматах записей.
 
 
        Формат:
 
 
      /OMIT=(CONDITION=имя-условия)
 
 
   где CONDITION=имя-условия  -  относится  к  имени  условия,
 
   которое было ранее определено в квалификаторе /CONDITION.
 
 
        Можно указывать, что записи должны быть опущены  (т.е.
 
   не включены) из выходного файла путем использования  квали-
 
   фикатора /OMIT. Сначала  необходимо  определить  условие  с
 
   помощью квалификатора /CONDITION.  Пользователь  определяет
 
 
                            - 75 -
 
                         00152-01 33 06
 
 
   выбор записи с помощью квалификатора  /OMIT,  которое  тре-
 
   бует, чтобы записи,  удовлетворяющие  этому  условию,  были
 
   выбраны для исключения из сортировки. По умолчанию  утилиты
 
   SORT и MERGE включают в выходной файл все записи из входно-
 
   го файла.
 
 
        В файле спецификации можно определять несколько квали-
 
   фикаторов /OMIT и /INCLUDE. Порядок их появления определяет
 
   тот порядок, в  котором  проверяются  входные  записи.  Все
 
   записи, которые еще не включены или не опущены  после  пос-
 
   леднего квалификатора  /OMIT,  будут  включены  в  выходной
 
   файл. Путем определения указания /OMIT  без  условия  можно
 
   исключать любые записи, которые не были ранее  опущены  или
 
   включены.
 
 
        Пример.
 
 
      /FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
 
      /CONDITION=(NAME=LOCATION,
 
                  TEST=(ZIP EQ "01863"))
 
      /OMIT=(CONDITION=LOCATION)
 
 
        Данные квалификаторы /CONDITION  и  /OMIT  определяют,
 
   что записи со значением поля ZIP 01863 не будут включены  в
 
   выходной файл.
 
 
 
        3.4.10. Квалификатор /PAD
 
 
 
        Данный квалификатор обеспечивает возможность определе-
 
   ния символа заполнения, используемого при изменении формата
 
   записей или при сравнении цепочек неодинаковой длины.
 
 
 
 
                            - 76 -
 
                         00152-01 33 06
 
 
        Формат:
 
 
      /PAD=один-символ
 
 
   где  один-символ  -  определение  символа,  который   будет
 
   использоваться  программой  SORT  для  заполнения  цепочки.
 
   Могут быть использованы символы,  десятичные,  восьмеричные
 
   или шестнадцатиричные цифры. Символ заполнения должен  быть
 
   определен с учетом следующих правил:
 
 
        - символ заключить в кавычки, например "#";
 
 
        - для десятичного числа указать десятичное  основание,
 
   например %D35;
 
 
        - для восьмеричного числа указать восьмеричное основа-
 
   ние, например %O043;
 
 
        - для 16-ричного числа  указать  16-ричное  основание,
 
   например %X23.
 
 
        Следует использовать квалификатор /PAD для определения
 
   символа заполнения при сравнении цепочек разной  длины  или
 
   при изменении формата записей. По умолчанию программа  SORT
 
   использует для заполнения нулевой символ. Двойные  символы,
 
   которые могут быть определены в качестве  одинарных  симво-
 
   лов, не могут быть использованы в качестве симолов заполне-
 
   ния.
 
 
        Пример.
 
 
      /PAD="."
 
 
        Данный квалификатор /PAD определяет,  что  в  качестве
 
   символа заполнения используется точка.
 
 
                            - 77 -
 
                         00152-01 33 06
 
 
        3.4.11. Квалификатор /PROCESS
 
 
 
        Данный квалификатор  определяет  метод  обработки  для
 
   операции  сортировки  (используется  только  с   программой
 
   SORT).
 
 
        Формат:
 
 
      /PROCESS=тип
 
 
   где тип - может принять значение RECORD, TAG,  ADDRESS  или
 
   INDEX.
 
 
        По умолчанию программа SORT использует процесс RECORD.
 
   При необходимости изменения формата выходных записей нельзя
 
   использовать ADDRESS или INDEX сортировку. Сравнение  четы-
 
   рех этих процессов приводится в п. 3.1.5.
 
 
        Пример.
 
 
      /PROCESS=TAG
 
 
        Данный квалификатор /PROCESS определяет, что программа
 
   SORT должна использовать TAG сортировку.
 
 
 
        3.4.12. Квалификатор /STABLE
 
 
 
        Данный квалификатор определяет, что записи  с  равными
 
   (одинаковыми) ключами направляются в выходной файл в  соот-
 
   ветствии с их порядком во входном файле. По умолчанию  при-
 
   нимается условие /NOSTABLE.
 
 
 
 
 
 
 
                            - 78 -
 
                         00152-01 33 06
 
 
        Формат:
 
 
      /[NO]STABLE
 
 
        По умолчанию порядок выходных  записей  с  одинаковыми
 
   ключами является непредсказуемым. Определение квалификатора
 
   /STABLE в файле  спецификаций  обеспечивает  такой  порядок
 
   следования записей с одинаковыми ключами в выходном  файле,
 
   каким он был во входных файлах, указанных в строке команды.
 
   При использовании данного квалификатора с сортировкой  нес-
 
   кольких входных файлов в выходном файле записи с одинаковы-
 
   ми ключами в первом файле будут  предшествовать  записям  с
 
   такими же ключами во втором файле и т.д.
 
 
        Пример.
 
 
      /STABLE
 
 
        Данный квалификатор обеспечивает, что записи с  одина-
 
   ковыми ключами будут иметь одинаковый порядок во входном  и
 
   в выходном файлах.
 
 
 
        3.4.13. Квалификатор /WORK_FILES
 
 
 
        Данный квалификатор определяет размещение рабочих фай-
 
   лов.
 
 
        Формат:
 
 
      /WORK_FILES=(устройство[,...])
 
 
   где устройство -  определение  логического  имени  рабочего
 
   файла. В отличие от квалификатора /WORK_FILES=N  (п.3.1.9),
 
   квалификатор               файла               спецификаций
 
 
                            - 79 -
 
                         00152-01 33 06
 
 
   /WORK_FILES=(устройство[,...]) определяет размещение  рабо-
 
   чих файлов, а не их число.
 
 
        Можно повысить производительность программы SORT путем
 
   размещения рабочих файлов на разные устройства  с  дисковой
 
   структурой. Использование квалификатора /WORK_FILES в файле
 
   спецификаций для изменения размещения рабочих файлов устра-
 
   няет  необходимость  выполнения  логических  присвоений  до
 
   вызова программы SORT на командном или программном уровне.
 
 
        Пример.
 
 
      /WORK_FILES=("WRKD$:")
 
 
        Данный  квалификатор  /WORK_FILES  размещает  один  из
 
   рабочих файлов сортировки на устройстве WRKD$:, так как это
 
   устройство имеет максимальную емкость доступной памяти.
 
 
 
        3.4.14. Пример файла спецификации
 
 
 
   /FIELD=(NAME=RECORD-TYPE,PO:1,SIZ:1) !тип записи, однобай-
 
                                        !товое поле
 
   /FIELD=(NAME=PRICE,PO:2,SIZ:8)       !поле PRICE
 
   /FIELD=(NAME=TAXES,PO:10,SIZ:5)      !поле TAXES
 
   /FIELD=(NAME=STYLE_A,PO:15,SIZ:10)   !поле STYLE в записи
 
                                        !формата A
 
   /FIELD=(NAME=STYLE_B,PO:20,SIZ:10)   !поле STYLE в записи
 
                                        !формата B
 
   /FIELD=(NAME=ZIP_A,PO:25,SIZ:5)      !поле ZIP в записи
 
                                        !формата A
 
   /FIELD=(NAME=ZIP_B,PO:15,SIZ:5)      !поле ZIP в записи
 
                                        !формата B
 
 
                            - 80 -
 
                         00152-01 33 06
 
 
   /CONDITION=(NAME=FORMAT_A,           !условие проверки
 
            TEST=(RECORD_TYPE EQ "A"))  !формата A
 
   /CONDITION=(NAME=FORMAT_B,           !условие проверки
 
            TEST=(RECORD_TYPE EQ "B"))  !формата B
 
   /INCLUDE=(CONDITION=FORMAT_A,        !формат включаемых за-
 
             KEY=ZIP_A,                 !писей типа A
 
             DATA=PRICE,
 
             DATA=TAXES,
 
             DATA=STYLE_A,
 
             DATA=ZIP_A)
 
   /INCLUDE=(CONDITION=FORMAT_B,        !формат включаемых за-
 
             KEY=ZIP_B,                 !писей типа B
 
             DATA=PRICE,
 
             DATA=TAXES,
 
             DATA=STYLE_B
 
             DATA=ZIP_B)
 
 
        В данном примере записи двух типов сортируются в соот-
 
   ветствии с инструкциями, указанными в  файле  спецификаций.
 
   Записи, которые начинаются с буквы "A"  в  первой  позиции,
 
   содержат поля PRICE, TAXES, STYLE и ZIP, начинающиеся соот-
 
   ветственно в позициях 2, 10, 15, 25.
 
 
        В записях, которые начинаются с  буквы  "B"  в  первой
 
   позиции, поля STYLE и ZIP размещены, начиная с позиций 20 и
 
   15 соответственно. Следует сначала определить поля в  обеих
 
   записях с помощью квалификатора /FIELD. Затем следует опре-
 
   делить проверку для различия между этими двумя типами запи-
 
   сей с помощью квалификаторов /CONDITION. После этого квали-
 
   фикаторы /INCLUDE  обеспечивают  изменение  формата  записи
 
   типа B на формат записи типа A на выходе.
 
 
                            - 81 -
 
                         00152-01 33 06
 
 
        При определении полей ключа или данных в квалификаторе
 
   /INCLUDE необходимо в явной форме определить все поля  клю-
 
   чей и данных.
 
 
        В данном примере записи, которые не относятся к типу A
 
   или к типу B не включаются в сортировку.
 
 
 
 
                  4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
 
 
 
 
        Входными данными могут быть от одного до десяти файлов
 
   системы МОС ВП для сортировки и от двух  до  десяти  файлов
 
   для слияния. Результатом сортировки и слияния является один
 
   выходной файл, включающий записи, следующие в пользователем
 
   выбранном порядке,  или  же  указатели  на  соответствующие
 
   записи входного (входных) файла (только в случае  сортиров-
 
   ки).
 
 
        Более подробная информация по  определению  входных  и
 
   выходных файлов приведена в подразделах 3.2 и 3.3.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 82 -
 
                         00152-01 33 06
 
 
                          5. СООБЩЕНИЯ
 
 
 
 
        Сообщения программ SORT и MERGE приведены в  документе
 
   [7].
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 83 -
 
                         00152-01 33 06
 
 
                  ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ
 
 
        1. Операционная система МОС ВП. Подсистема управления.
 
   Диалоговый  командный   язык.   Руководство   пользователя.
 
   00152-01 92 19-1.
 
 
        2. Операционная система МОС ВП. Подсистема управления.
 
   Основы интерактивной работы в системе. Справочный материал.
 
   00152-01 97 03.
 
 
        3. Операционная система МОС ВП. Подсистема  редактиро-
 
   вания и форматирования. Универсальный  текстовый  редактор.
 
   Руководство оператора. 00152-01 34 02.
 
 
        4. Операционная система МОС ВП. Подсистема управления.
 
   Использование диалогового командного языка и командных про-
 
   цедур. Справочный материал. 00152-01 97 04.
 
 
        5. Операционная система МОС ВП. Подсистема  системного
 
   сервиса. Интерфейсные программы. Руководство  программиста.
 
   00152-01 33 02.
 
 
        6. Операционная система  МОС  ВП.  Система  управления
 
   данными СУД-32. Описание применения. 00152-01 31 02.
 
 
        7. Операционная система МОС ВП. Подсистема управления.
 
   Сообщения системы и действия по восстановлению.  Справочный
 
   материал. 00152-01 97 02-1.
 
 
 
 
 
 
 
 
 
 
                             
 
 
                              - 83K -
 
                        2б.00152-01 33 06
 
 
 
                  ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ
 
 
        1. Операционная система МОС  ВП. Подсистема управления.
 
   Диалоговый командный язык.  Руководство пользователя.  
 
   2б.00152-01 92 19-1.
 
 
        2. Операционная система МОС ВП. Подсистема управления. 
 
   Основы интерактивной работы в системе. Справочный материал. 
 
   2б.00152-01 97 03.
 
 
        3. Операционная система МОС ВП. Подсистема редактиро-
 
   вания и форматирования. Универсальный текстовый редактор. 
 
   Руководство оператора. 2б.00152-01 34 02.
 
 
        4. Операционная система МОС ВП. Подситемма управления. 
 
   Использование диалогового командного языка и командных  про-
 
   цедур. Справочный материал. 2б.00152-01 97 04.
 
 
        5.Операционная система МОС ВП. Подсистема системного 
 
   сервиса. Интерфейсные программы. Руководство программиста. 
 
   2б.00152-01 33 02.
 
 
        6. Операционная система  МОС  ВП.  Система  управления
 
   данными СУД-32. Описание применения. 2б.00152-01 31 02.
 
 
        7. Операционная система МОС ВП. Подсистема управления. 
 
   Сообщения системы и действия по восстановлению. Справочный
 
   материал. 2б.00152-01 97 02-1.
 
 
  
 
 
 
 
 
 
 
 

                           - 84K -                                  
                                                                   
                     2б.00152-01 33 06
  
  
 ------------------------------------------------------------
 I                                                          I
 I                  Лист регистрации изменений              I
 I                                                          I
 I----------------------------------------------------------I
 IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
 I-----------------------IлистовIдоку- IN сопро- I     I    I
 IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
 Iз Iме- Iме- Iвых Iлиро-Iниц)  I      Iного до- I     I    I
 Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
 I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
 I----------------------------------------------------------I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 I  I    I    I    I     I      I      I         I     I    I
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!