| **Navigation:**  [[introduction.htm|Language Reference]] > 13 - Built-in Functions >====== SORT (sort queue entries) ====== | [[skip bypass records in sequence .htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[sql use sql code .htm|{{btn_next_n.gif|Next page}}]] | | || | | **SORT( **//queue//, | | [**+**]//key//,...,[**-**]//key//]| **)** | | | | |// name//| | | | | |// function//| | {{blk2blue.jpg|blk2blue.jpg}} | **SORT** | Reorders entries in a QUEUE. | | //queue// | The label of a QUEUE structure, or the label of a passed QUEUE parameter. | | **+ -** | The leading plus or minus sign specifies the //key// will be sorted in ascending or descending sequence. | | //key// | The label of a field declared within the QUEUE structure. If the QUEUE has a PRE attribute, the //key// must include the prefix. This may not be a reference variable. | | //name// | A string constant, variable, or expression containing the NAME attribute of QUEUE fields, separated by commas, and optional leading + or - signs for each attribute. This parameter is case sensitive and may not contain any reference variables. | | //function// | The label of the function containing two parameters of a *GROUP or named GROUP passed by address, and having a SIGNED return value. Both parameters must use the same parameter type, and cannot be omitted. The RAW, C and PASCAL attributes are not permitted in the prototype declaration. See [[additional queue considerations.htm#queuekeyparameter|Additional Queue Considerations]]. | **SORT** reorders the entries in a QUEUE. QUEUE entries with identical key values maintain their relative position. | SORT(//queue,key//) | Reorders the QUEUE in the sequence specified by the //key//. Multiple //key// parameters may be used (up to 16), separated by commas, with optional leading plus or minus signs to indicate ascending or descending sequence. | | SORT(//queue,name//) | Reorders the QUEUE in the sequence specified by the //name// string. The //name// string must contain the NAME attributes of the fields, separated by commas, with leading plus or minus signs to indicate ascending or descending sequence. | **Errors Posted:** | 08 | Insufficient Memory | | 75 | Invalid Field Type Descriptor | **Example:** **Location  QUEUE,PRE(Loc)** **Name       STRING(20),NAME('FirstField')** **City       STRING(10),NAME('SecondField')** **State      STRING(2)** **Zip        DECIMAL(5,0)** **          END** ** CODE** ** SORT(Location,Loc:State,Loc:City,Loc:Zip)    !Sort by zip in city in state** ** SORT(Location,+Loc:State,-Loc:Zip)           !Sort descending by zip in state** ** SORT(Location,'FirstField,-SecondField')     !Sort descending by city in name** ************************** **!Example of using SORT with a FUNCTION as a parameter** ** PROGRAM** ** MAP** **  CaseInsensitive(*GROUP A, *GROUP B),SIGNED** ** end** **Q      QUEUE** **Val      STRING(5)** **       END** **Window WINDOW('Test Sort'),AT(,,116,224),FONT('MS SansSerif',8,,FONT:regular),IMM,SYSTEM,GRAY,AUTO** **       BUTTON('Sort Case Sensitive'),AT(8,3,95,14),USE(?SortCase),LEFT,DEFAULT** **       BUTTON('Sort Case INSensitive'),AT(8,20,95,14),USE(?SortNoCase),LEFT** **       LIST,AT(6,37,101,179),USE(?List1),FORMAT('7L(2)|M~Val~@s5@'),FROM(Q)** **     END** ** CODE** ** Q.Val = 'aaaaa'; Add(Q)** ** Q.Val = 'AAAAA'; Add(Q)** ** Q.Val = 'ddddd'; Add(Q)** ** Q.Val = 'DDDDD'; Add(Q)** ** Q.Val = 'EEEEE'; Add(Q)** ** Q.Val = 'eeeee'; Add(Q)** ** Q.Val = 'qqqqq'; Add(Q)** ** Q.Val = 'QQQQQ'; Add(Q)** ** Q.Val = 'zzzzz'; Add(Q)** ** Q.Val = 'ZZZZZ'; Add(Q)** ** Q.Val = 'ggggg'; Add(Q)** ** Q.Val = 'GGGGG'; Add(Q)** ** OPEN(Window)** ** ACCEPT** **   CASE ACCEPTED()** **     OF ?SortCase   ; SORT(Q, Q.Val)** **     OF ?SortNoCase ; SORT(Q, CaseInsensitive)** **   END** ** END** **CaseInsensitive PROCEDURE(*GROUP A, *GROUP B)!,SIGNED** ** CODE** ** IF UPPER(A) = UPPER(B)** **  RETURN  0** ** ELSIF UPPER(A) > UPPER(B)** **  RETURN  1** ** ELSE** **  RETURN -1** **END** **See Also:** [[add add an entry .htm|ADD]] [[get read a record or entry .htm|GET]] [[put re write record .htm|PUT]]