A format for expressing an ordered list of integers is to use a comma separated list of either

 individual integers
 Or a range of integers denoted by the starting integer separated from the end integer in the range by a dash, '-'. (The range includes all integers in the interval including both endpoints)
 The range syntax is to be used only for, and for every range that expands to more than two values.
Example

The list of integers:

 -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20
Is accurately expressed by the range expression:

 -6,-3-1,3-5,7-11,14,15,17-20
(And vice-versa).



Task

Expand the range description:

  -6,-3--1,3-5,7-11,14,15,17-20 

Note that the second element above,
is the range from minus 3 to minus 1. 



Related task

   Range extraction


/*NetRexx program to expand a range of integers into a list. *************
* 09.08.2012 Walter Pachl derived from my Rexx version
* Changes: translate(old,' ',',') -> old.translate(' ',',')
*          dashpos=pos('-',x,2)   -> dashpos=x.pos('-',2)
*          Do                     -> Loop
*          Parse Var a x a        -> Parse a x a
*          Parse Var x ...        -> Parse x ...
**********************************************************************/
 
parse arg old
if old = '' then
  old='-6,-3--1,3-5,7-11,14,15,17-20' /*original list of nums/ranges */
 
  Say 'old='old                     /*show old list of nums/ranges.  */
  a=old.translate(' ',',')          /*translate commas to blanks     */
  new=''                            /*new list of numbers (so far).  */
 
  comma=''
  Loop While a<>''                  /* as long as there is input     */
    Parse a x a                     /* get one element               */
    dashpos=x.pos('-',2)            /* find position of dash, if any */
    If dashpos>0 Then Do            /* element is low-high           */
      Parse x low =(dashpos) +1 high /* split the element        */
      Loop j=low To high            /* output all numbers in range   */
        new=new||comma||j           /* with separating commas        */
        comma=','                   /* from now on use comma         */
        End
      End
    Else Do                         /* element is a number           */
      new=new||comma||x             /* append (with comma)           */
      comma=','                     /* from now on use comma         */
      End
    End
  Say 'new='new                     /*show the expanded list         */
 