LIST.CREATE s,lName LIST.CREATE s,lFirstName LIST.CREATE s,lBirthdates LIST.CREATE s,lBirthday LIST.CREATE s,lNewAge LIST.ADD lName,"XName1","CName2","UName3","CName4","CName2" LIST.ADD lFirstName,"Charlie","Juliett","Mike","Romeo","Victor" LIST.ADD lBirthdates,"2000-12-19","1980-11-15","1985-03-03","1970-01-14","1972-12-24" % Europe- and WWW-Date-Format DEBUG.ON zeros$ ="000000000000000" t = TIME() mYear$ = USING$("", "%tY", t) LIST.SIZE lBirthdates, ls FOR i = 1 TO ls LIST.GET lBirthdates, i, date$ SPLIT col$[],date$,"-" deltaT = TIME(VAL(mYear$),col$[2],col$[3],23,59,59) -t age = VAL(mYear$) - VAL(col$[1]) IF deltaT < 0 THEN deltaT = TIME(VAL(mYear$)+1,col$[2],col$[3],23,59,59)-t : age = VAL(mYear$)+1 - VAL(col$[1]) deltaT$ = INT$(deltaT/1000/60/60/24*10) LIST.ADD lBirthday, LEFT$(zeros$, LEN(zeros$) - LEN(deltaT$)) + deltaT$ % Add leading zeros for string sorting LIST.ADD lNewAge, LEFT$(zeros$, LEN(zeros$) - LEN(INT$(age))) + INT$(age) % Add leading zeros for string sorting NEXT ARRAY.LOAD options$[], "First name", "Name", ~ "Birthdates", "Days before next birthday", "Comming birthday" DIALOG.SELECT dSel, options$[] , "Sort by" IF dSel = 1 sortedBy = lFirstName ELSEIF dSel = 2 sortedBy = lName ELSEIF dSel = 3 sortedBy = lBirthdates ELSEIF dSel = 4 sortedBy = lBirthday ELSEIF dSel = 5 sortedBy = lNewAge ENDIF DEBUG.ON LIST.CREATE s, mResult LIST.JOIN mResult, sortedBy, ,";","_+i" % Add index DEBUG.DUMP.LIST mResult LIST.SORT mResult, 0, "fr_FR" DEBUG.DUMP.LIST mResult ! LIST.CREATE s, lll % List on the left side, not needed LIST.CREATE n, rrr % List on the right side LIST.SPLIT , rrr, mResult, ";" DEBUG.DUMP.LIST rrr LIST.SIZE rrr, ls FOR i = 1 TO ls LIST.GET rrr, i, k LIST.GET lFirstName, k, firstName$ LIST.GET lName, k, name$ LIST.GET lBirthdates, k, birthdates$ LIST.GET lBirthday, k, deltaDays$ LIST.GET lNewAge, k, newAge$ PRINT firstName$, name$, birthdates$, VAL(deltaDays$)/10, INT$(VAL(newAge$));"." NEXT