>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 >