TEXT TO lcx NOSHOW CDX 1 10 2 03 1.1 12.R 1.1.R 1201.1.RBX.250.R.1 1201.1.R.250.R.1 1201.1.RBX.1.R.1 1.R 1.R.1 A B AA 5.R CDXB CDX.R ENDTEXT &&lcx STRTOFILE(lcx,'xyz.tmp') CREATE CURSOR curXYZ (cField c(40),cTag c(40)) APPEND BLANK &&just to add an empty record APPEND FROM xyz.tmp DELIMITED WITH TAB DELETE FILE xyz.tmp *get max section length lnLen = 1 SELECT; MAX(GetSectLen(Cur1.cField,@lnLen)) AS nLen; FROM curXYZ AS Cur1; INTO CURSOR curLen USE lnLen = lnLen+2 SELECT curXYZ REPLACE ALL cTag WITH IP_ASCII(cField,lnLen) *create index TEXT TO lcx NOSHOW TEXTMERGE INDEX ON IP_ASCII(cField,<<lnLen>>) TAG anIndex ENDTEXT &&lcx EXECSCRIPT(lcx) *there we are BROWSE LAST NOWAIT FUNCTION IP_ASCII LPARAMETERS; tcField,; tnLength LOCAL; lcReturn,; lcSection,; lnSections,; lnSection LOCAL ARRAY; laCols[1] lnSections = ALINES(laCols, UPPER(m.tcField),5,".") lcReturn = "" FOR lnSection = 1 TO m.lnSections lcSection = laCols(m.lnSection) lcReturn = m.lcReturn + IIF(ISDIGIT(m.lcSection),PADL(ALLTRIM(m.lcSection),m.tnLength,'0'),PADL(ALLTRIM(m.lcSection),m.tnLength,'@')) NEXT RETURN PADR(m.lcReturn,MIN(LEN(m.tcField),240)) ENDFUNC &&IP_ASCII *determine max section length in SELECT SQL FUNCTION GetSectLen LPARAMETERS; tcField,; tnReturn LOCAL; lnSections,; lnSection LOCAL ARRAY; laCols[1] lnSections = ALINES(laCols, UPPER(m.tcField),5,".") FOR lnSection = 1 TO m.lnSections tnReturn = MAX(m.tnReturn,LEN(laCols(m.lnSection))) ENDFOR &&lnSection RETURN tnReturn ENDFUNC &&GetSectLen