CREATE CURSOR MyUnits ( MyUnit C( 7 ) ) INDEX ON LEFT( MyUnit, 1 ) + REPLICATE( "0", 7 - LEN( ALLTRIM( MyUnit ) ) ) + SUBSTR( MyUnit, 2, LEN( ALLTRIM( MyUnit ) ) - 1 ) TAG MyUnit * This INDEX expression is the trickiest bit, see notes below * Gather values, INSERT into the cursor: INSERT INTO MyUnits ( MyUnit ) VALUES ( "T4.03||" ) INSERT INTO MyUnits ( MyUnit ) VALUES ( "T4.01||" ) INSERT INTO MyUnits ( MyUnit ) VALUES ( "T2.05||" ) INSERT INTO MyUnits ( MyUnit ) VALUES ( "W27||" ) INSERT INTO MyUnits ( MyUnit ) VALUES ( "W211||" ) LOCAL lcResult m.lcResult = "" SELECT MyUnits SCAN ALL m.lcResult = m.lcResult + ALLTRIM( MyUnits.MyUnit ) ENDSCAN USE IN MyUnits ?m.lcResult * Notes * Figuring out how to sort/index is actually the trickiest part of your question * Even that is relatively easy except for the W27||W211|| at the end * If your strings always end (i.e. are delimited by) that pair at the end, it makes indexing easier * You accumulate everything except those two strings in the cursor, then manually add those two strings at the end * In that case you can simply INDEX ON MyUnit TAG MyUnit * If you want something that will work without knowing the finishing delimiter(s), what you can do is pad the total * length of the final two strings in the index expression up to the 7 character length of the others. In your case * in the index expression you would want them to be sorted as "W0027||" and "W0211||" in order to be sorted properly. * The INDEX expression in the main code sample injects the proper number of zeroes * in the proper location to pad the expression indexed to 7 characters