* 100 elements 0.410 ALINES() m. 0.327 OCCURS() * 200 elements 1.091 ALINES() m. 1.416 OCCURS() * 300 elements 2.013 ALINES() m. 2.686 OCCURS() * 400 elements 3.491 ALINES() m. 4.570 OCCURS() * 500 elements 5.089 ALINES() m. 6.642 OCCURS()Here's the modified algorithm:
FUNCTION reverse_occurs_AT_mdot_unconditional LPARAMETERS m.tcText IF NOT ","$m.tcText RETURN m.tcText ENDIF LOCAL lnLines,lcRevString,lnStart,lnEnd lnLines=OCCURS(",",m.tcText)+1 lnEnd=LEN(m.tcText) lnStart=AT(",",m.tcText,m.lnLines-1)+1 lcRevString=ALLTRIM(SUBSTR(m.tcText,m.lnStart,m.lnEnd-m.lnStart+1)) FOR x = m.lnLines-2 TO 1 STEP -1 lnEnd=m.lnStart-2 lnStart=AT(",",m.tcText,m.x)+1 lcRevString=m.lcRevString+","+SUBSTR(m.tcText,m.lnStart,m.lnEnd-m.lnStart+1) ENDFOR x RETURN m.lcRevString+", "+LEFT(m.tcText,m.lnStart-2)>>It doesn't pass the validation test. It returns an incorrect string. It's missing the first element in the list.